git-svn-id: svn://db.shs.com.ru/libs@536 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2019-05-24 19:06:35 +00:00
parent 1082db07c6
commit 58fce3cd81
29 changed files with 394 additions and 599 deletions

View File

@@ -96,7 +96,7 @@ const char qgl_structs[] =
"uniform QGLMaterial qgl_Material;\n";
QString loadShaderFile(__GLShaderProgram__ * prog, __GLShader__::ShaderType type, const QString & file) {
QString loadShaderFile(QOpenGLShaderProgram * prog, QOpenGLShader::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(__GLShaderProgram__ * prog, __GLShader__::ShaderType type
if (version.toInt() >= 150) {
int ip = all.indexOf("\n", i);
if (ip < 0) return all;
if (type == __GLShader__::Vertex) {
if (type == QOpenGLShader::Vertex) {
all.insert(ip + 1, qgl_vertex_head);
}
if (type == __GLShader__::Fragment) {
if (type == QOpenGLShader::Fragment) {
all.insert(ip + 1, qgl_fragment_head);
}
all.insert(ip + 1, qgl_structs);
@@ -120,27 +120,25 @@ QString loadShaderFile(__GLShaderProgram__ * prog, __GLShader__::ShaderType type
}
bool loadShaders(__GLShaderProgram__ * prog, const QString & name, const QString & dir) {
bool loadShaders(QOpenGLShaderProgram * prog, const QString & name, const QString & dir) {
prog->removeAllShaders();
QDir d(dir);
QFileInfoList sl;
//qDebug() << "[QGLView] Shader \"" + name + "\" load shaders from" << d.absolutePath();
#if QT_VERSION >= 0x040700
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, __GLShader__::Geometry, i.absoluteFilePath());
loadShaderFile(prog, QOpenGLShader::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, __GLShader__::Vertex, i.absoluteFilePath());
loadShaderFile(prog, QOpenGLShader::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, __GLShader__::Fragment, i.absoluteFilePath());
loadShaderFile(prog, QOpenGLShader::Fragment, i.absoluteFilePath());
}
if (!prog->link()) {
qDebug() << "[QGLView] Shader \"" + name + "\" link error: " + prog->log();
@@ -150,7 +148,7 @@ bool loadShaders(__GLShaderProgram__ * prog, const QString & name, const QString
}
void setUniformMatrices(__GLShaderProgram__ * prog, QMatrix4x4 proj, QMatrix4x4 view, QMatrix4x4 prevproj, QMatrix4x4 prevview) {
void setUniformMatrices(QOpenGLShaderProgram * prog, QMatrix4x4 proj, QMatrix4x4 view, QMatrix4x4 prevproj, QMatrix4x4 prevview) {
if (!prog) return;
if (!prog->isLinked()) return;
QMatrix4x4 mvpm = proj * view;
@@ -170,7 +168,7 @@ void setUniformMatrices(__GLShaderProgram__ * prog, QMatrix4x4 proj, QMatrix4x4
}
void setUniformMap(__GLShaderProgram__ * prog, QString map_name, const Map & map, int channel, int def_channel) {
void setUniformMap(QOpenGLShaderProgram * prog, QString map_name, const Map & map, int channel, int def_channel) {
if (!prog) return;
if (!prog->isLinked()) return;
prog->setUniformValue(("qgl_Material." + map_name + ".offset").toLatin1().constData(), map.color_offset);
@@ -179,7 +177,7 @@ void setUniformMap(__GLShaderProgram__ * prog, QString map_name, const Map & map
}
void setUniformMaterial(__GLShaderProgram__ * prog, const Material & mat) {
void setUniformMaterial(QOpenGLShaderProgram * prog, const Material & mat) {
if (!prog) return;
if (!prog->isLinked()) return;
QGLCI
@@ -206,7 +204,7 @@ void setUniformMaterial(__GLShaderProgram__ * prog, const Material & mat) {
}
void setUniformLights(__GLShaderProgram__ * prog, const QVector<Light*> & lights, const QMatrix4x4 & mat, int shadow_start) {
void setUniformLights(QOpenGLShaderProgram * 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);
}
@@ -223,7 +221,7 @@ void setUniformLights(__GLShaderProgram__ * prog, const QVector<Light*> & lights
" sampler2DShadow shadow;\n"
" mat4 shadowMatrix;\n"
*/
void setUniformLight(__GLShaderProgram__ * prog, Light * light, QString ulightn, const QMatrix4x4 & mat, int shadow) {
void setUniformLight(QOpenGLShaderProgram * prog, Light * light, QString ulightn, const QMatrix4x4 & mat, int shadow) {
if (!prog) return;
if (!prog->isLinked()) return;
QMatrix4x4 m = mat * light->worldTransform();