Code:
void GLWidget::initializeGL ()
{
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &m_uiTexture);
...
}
void GLWidget::paintTextured()
{
//refresh_texture();
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, m_uiTexture);
GLfloat afVertices[] = {
-0.5, -0.5, -0.5, 0.5,-0.5,-0.5,-0.5,0.5,-0.5,
0.5, 0.5, -0.5, -0.5,0.5,-0.5,0.5,-0.5,-0.5,
};
glVertexAttribPointer(vertexAttr2, 3, GL_FLOAT, GL_FALSE, 0, afVertices);
glEnableVertexAttribArray(vertexAttr2);
GLfloat afTexCoord[] = {
1.0f,1.0f, 0.0f,1.0f, 1.0f,0.0f,
0.0f,0.0f, 1.0f,0.0f, 0.0f,1.0f,
};
glVertexAttribPointer(texCoordAttr2, 2, GL_FLOAT, GL_FALSE, 0, afTexCoord);
glEnableVertexAttribArray(texCoordAttr2);
GLfloat afNormals[] = {
0,0,1, 0,0,1, 0,0,1,
0,0,1, 0,0,1, 0,0,1,
};
glVertexAttribPointer(normalAttr2, 3, GL_FLOAT, GL_FALSE, 0, afNormals);
glEnableVertexAttribArray(normalAttr2);
glUniform1i(textureUniform2, 0); // use texture unit 0
glDrawArrays(GL_TRIANGLES, 0, 6);
glDisableVertexAttribArray(vertexAttr2);
glDisableVertexAttribArray(normalAttr2);
glDisableVertexAttribArray(texCoordAttr2);
}
void GLWidget::paintGL()
{
QPainter painter;
painter.begin(this);
glEnable(GL_TEXTURE_2D);
CameraN900::refresh_buffer(); //manually call appsink to fatch for data in the buffer
unsigned char* data=(unsigned char *) GST_BUFFER_DATA (CameraN900::buffer);
glBindTexture(GL_TEXTURE_2D, m_uiTexture);
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, buffer_width,buffer_height, 0, GL_RGB, GL_UNSIGNED_BYTE, data );
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
GLfloat modelview[16];
IdentityMatrix(modelview);
ScaleMatrix(modelview, 1.8, 1.8, 0);
glUseProgram(program2);
glUniformMatrix4fv(matrixUniform2, 1, GL_FALSE, modelview);
paintTextured();
glUseProgram(0);
swapBuffers();
}