git-svn-id: svn://db.shs.com.ru/libs@286 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -96,7 +96,7 @@ const char qgl_structs[] =
|
||||
"uniform QGLMaterial qgl_Material;\n";
|
||||
|
||||
|
||||
QString loadShaderFile(QGLShaderProgram * prog, QGLShader::ShaderType type, const QString & file) {
|
||||
QString loadShaderFile(__GLShaderProgram__ * prog, __GLShader__::ShaderType type, const QString & file) {
|
||||
QFile f(file);
|
||||
if (!f.open(QIODevice::ReadOnly)) return "";
|
||||
QString all = QString::fromUtf8(f.readAll());
|
||||
@@ -105,10 +105,10 @@ QString loadShaderFile(QGLShaderProgram * prog, QGLShader::ShaderType type, cons
|
||||
if (version.toInt() >= 150) {
|
||||
int ip = all.indexOf("\n", i);
|
||||
if (ip < 0) return all;
|
||||
if (type == QGLShader::Vertex) {
|
||||
if (type == __GLShader__::Vertex) {
|
||||
all.insert(ip + 1, qgl_vertex_head);
|
||||
}
|
||||
if (type == QGLShader::Fragment) {
|
||||
if (type == __GLShader__::Fragment) {
|
||||
all.insert(ip + 1, qgl_fragment_head);
|
||||
}
|
||||
all.insert(ip + 1, qgl_structs);
|
||||
@@ -120,7 +120,7 @@ QString loadShaderFile(QGLShaderProgram * prog, QGLShader::ShaderType type, cons
|
||||
}
|
||||
|
||||
|
||||
bool loadShaders(QGLShaderProgram * prog, const QString & name, const QString & dir) {
|
||||
bool loadShaders(__GLShaderProgram__ * prog, const QString & name, const QString & dir) {
|
||||
prog->removeAllShaders();
|
||||
QDir d(dir);
|
||||
QFileInfoList sl;
|
||||
@@ -129,18 +129,18 @@ bool loadShaders(QGLShaderProgram * prog, const QString & name, const QString &
|
||||
sl = d.entryInfoList(QStringList(name + ".geom"), QDir::Files | QDir::NoDotAndDotDot);
|
||||
foreach (const QFileInfo & i, sl) {
|
||||
qDebug() << "[QGLView] Shader \"" + name + "\" add geometry shader:" << i.fileName();
|
||||
loadShaderFile(prog, QGLShader::Geometry, i.absoluteFilePath());
|
||||
loadShaderFile(prog, __GLShader__::Geometry, i.absoluteFilePath());
|
||||
}
|
||||
#endif
|
||||
sl = d.entryInfoList(QStringList(name + ".vert"), QDir::Files | QDir::NoDotAndDotDot);
|
||||
foreach (const QFileInfo & i, sl) {
|
||||
//qDebug() << "[QGLView] Shader \"" + name + "\" add vertex shader:" << i.fileName();
|
||||
loadShaderFile(prog, QGLShader::Vertex, i.absoluteFilePath());
|
||||
loadShaderFile(prog, __GLShader__::Vertex, i.absoluteFilePath());
|
||||
}
|
||||
sl = d.entryInfoList(QStringList(name + ".frag"), QDir::Files | QDir::NoDotAndDotDot);
|
||||
foreach (const QFileInfo & i, sl) {
|
||||
//qDebug() << "[QGLView] Shader \"" + name + "\" add fragment shader:" << i.fileName();
|
||||
loadShaderFile(prog, QGLShader::Fragment, i.absoluteFilePath());
|
||||
loadShaderFile(prog, __GLShader__::Fragment, i.absoluteFilePath());
|
||||
}
|
||||
if (!prog->link()) {
|
||||
qDebug() << "[QGLView] Shader \"" + name + "\" link error: " + prog->log();
|
||||
@@ -150,7 +150,7 @@ bool loadShaders(QGLShaderProgram * prog, const QString & name, const QString &
|
||||
}
|
||||
|
||||
|
||||
void setUniformMatrices(QGLShaderProgram * prog, QMatrix4x4 proj, QMatrix4x4 view, QMatrix4x4 prevproj, QMatrix4x4 prevview) {
|
||||
void setUniformMatrices(__GLShaderProgram__ * prog, QMatrix4x4 proj, QMatrix4x4 view, QMatrix4x4 prevproj, QMatrix4x4 prevview) {
|
||||
QMatrix4x4 mvpm = proj * view;
|
||||
QMatrix4x4 pmvpm = prevproj * prevview;
|
||||
QMatrix3x3 nm = view.normalMatrix();
|
||||
@@ -167,20 +167,21 @@ void setUniformMatrices(QGLShaderProgram * prog, QMatrix4x4 proj, QMatrix4x4 vie
|
||||
}
|
||||
|
||||
|
||||
void setUniformMap(QGLShaderProgram * prog, QString map_name, const Map & map, int channel, int def_channel) {
|
||||
void setUniformMap(__GLShaderProgram__ * prog, QString map_name, const Map & map, int channel, int def_channel) {
|
||||
prog->setUniformValue(("qgl_Material." + map_name + ".offset").toLatin1().constData(), map.color_offset);
|
||||
prog->setUniformValue(("qgl_Material." + map_name + ".amount").toLatin1().constData(), map.color_amount);
|
||||
prog->setUniformValue(("qgl_Material." + map_name + ".map").toLatin1().constData(), map.bitmap_id > 0 ? channel : def_channel);
|
||||
}
|
||||
|
||||
|
||||
void setUniformMaterial(QGLShaderProgram * prog, const Material & mat) {
|
||||
void setUniformMaterial(__GLShaderProgram__ * prog, const Material & mat) {
|
||||
QGLCI
|
||||
GLfloat mat_diffuse[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
||||
mat_diffuse[0] = mat.color_diffuse.redF();
|
||||
mat_diffuse[1] = mat.color_diffuse.greenF();
|
||||
mat_diffuse[2] = mat.color_diffuse.blueF();
|
||||
mat_diffuse[3] = mat.color_diffuse.alphaF() * (1.f - mat.transparency);
|
||||
glVertexAttrib4f(prog->attributeLocation("qgl_Color"), mat_diffuse[0], mat_diffuse[1], mat_diffuse[2], mat_diffuse[3]);
|
||||
QGLC glVertexAttrib4f(prog->attributeLocation("qgl_Color"), mat_diffuse[0], mat_diffuse[1], mat_diffuse[2], mat_diffuse[3]);
|
||||
prog->setUniformValue("qgl_Material.transparency", mat.transparency);
|
||||
prog->setUniformValue("qgl_Material.reflectivity", mat.reflectivity);
|
||||
prog->setUniformValue("qgl_Material.iof", mat.iof);
|
||||
@@ -198,7 +199,7 @@ void setUniformMaterial(QGLShaderProgram * prog, const Material & mat) {
|
||||
}
|
||||
|
||||
|
||||
void setUniformLights(QGLShaderProgram * prog, const QVector<Light*> & lights, const QMatrix4x4 & mat, int shadow_start) {
|
||||
void setUniformLights(__GLShaderProgram__ * prog, const QVector<Light*> & lights, const QMatrix4x4 & mat, int shadow_start) {
|
||||
for (int i = 0; i < lights.size(); ++i)
|
||||
setUniformLight(prog, lights[i], QString("qgl_Light[%1]").arg(i), mat, shadow_start + i);
|
||||
}
|
||||
@@ -215,7 +216,7 @@ void setUniformLights(QGLShaderProgram * prog, const QVector<Light*> & lights, c
|
||||
" sampler2DShadow shadow;\n"
|
||||
" mat4 shadowMatrix;\n"
|
||||
*/
|
||||
void setUniformLight(QGLShaderProgram * prog, Light * light, QString ulightn, const QMatrix4x4 & mat, int shadow) {
|
||||
void setUniformLight(__GLShaderProgram__ * prog, Light * light, QString ulightn, const QMatrix4x4 & mat, int shadow) {
|
||||
QMatrix4x4 m = mat * light->worldTransform();
|
||||
QVector4D pos(0, 0, 0, 1.), dir(light->direction);//, dir0(light->dir0), dir1(light->dir1);
|
||||
pos = m * pos;
|
||||
|
||||
Reference in New Issue
Block a user