PDA

View Full Version : Raw OpenGL not working in QOpenGLWidget with QT 5.11



andy.yin
31st July 2020, 16:05
Hello All:
As before we're working on QT 5.6 with QOpenGLWigdget, and call raw OpenGL API inside it
SummWidget::initializeGL()
{
initializeOpenGLFunctions();

// do call raw openGL API
}
void SummWidget::paintGL()
{
// do call raw opengl API
}
It works well, but when we upgrade to QT 5.11, there is no render image show on QT(QT works well), and GPU is working.
and we tried that


GLuint LoadShader ( GLenum type, const char *shaderSrc )
{
GLuint shader;
GLint compiled;

// Create the shader object
shader = glCreateShader ( type );

if ( shader == 0 )
return 0;

// Load the shader source
glShaderSource ( shader, 1, &shaderSrc, NULL );

// Compile the shader
glCompileShader ( shader );

// Check the compile status
glGetShaderiv ( shader, GL_COMPILE_STATUS, &compiled );

if ( !compiled )
{
GLint infoLen = 0;

glGetShaderiv ( shader, GL_INFO_LOG_LENGTH, &infoLen );

if ( infoLen > 1 )
{
char* infoLog = (char* )malloc (sizeof(char) * infoLen );

glGetShaderInfoLog ( shader, infoLen, NULL, infoLog );
printf ( "Error compiling shader:\n%s\n", infoLog );

free ( infoLog );
}

glDeleteShader ( shader );
return 0;
}

return shader;

}
void TestDraw()
{

GLfloat vVertices[] = { 0.0f, 0.5f, 0.0f,
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f };

// Set the viewport
glViewport ( 0, 0, 670, 720 );

// Clear the color buffer
glClear ( GL_COLOR_BUFFER_BIT );

// Use the program object
glUseProgram (programObject );

// Load the vertex data
glVertexAttribPointer ( 0, 3, GL_FLOAT, GL_FALSE, 0, vVertices );
glEnableVertexAttribArray ( 0 );

glDrawArrays ( GL_TRIANGLES, 0, 3 );

}

call the TestDraw() in paintGL(), then we can see a red triangle if remove the legacy raw opengl code.
if put them together,nothing show up event put the TestDraw() at the end.
Any suggestion? Thanks