View Full Version : Qt5 crash (GLSL try to get uniforms)

9th July 2014, 09:09
I need to get uniform names from ogl shaders(for simple editor project). I did not want to parse shaders by hands, so I writed some tricky code :) In Qt4 this code works just fine, but in Qt5 appears crash at ctx.create(). This crash deep in Qt Gui library, somewhere in QWindow…

QGLFormat fmt = QGLFormat::defaultFormat();

fmt.setVersion(2, 0);


QWidget temp;

QGLContext ctx(fmt, &temp);

if (ctx.create())



QGLFunctions fncs(&ctx);

QGLShaderProgram prg(&ctx);

bool needToLink = false;

QGLShader vs(QGLShader::Vertex, &ctx);

if (!vertex.isEmpty() && (needToLink |= vs.compileSourceCode(vertex)))


QGLShader fs(QGLShader::Fragment, &ctx);

if (!fragment.isEmpty() && (needToLink |= fs.compileSourceCode(fragment)))


if (!needToLink)



const QGLContext *context = QGLContext::currentContext();

GLint total = -1;

fncs.glGetProgramiv( prg.programId(), GL_ACTIVE_UNIFORMS, &total );

for(GLint i = 0; i < total; ++i)


GLsizei nameLen = -1;

GLint num = -1;

GLenum type = GL_ZERO;

char name[100];

fncs.glGetActiveUniform( prg.programId(), i, sizeof(name)-1,

&nameLen, &num, &type, name );

name[nameLen] = 0;

uniforms << glsl_var_type(shaderParamType(type), name, num);



What you think about it? May be it is bug in library. Or it’s my bug. Anyway, how can I get uniform names – may be exists more beautiful solutions for this task?

I post this question on qt-project forum but still no replies... So I decide copy my question here