{
if (painter
->paintEngine
()->type
() != QPaintEngine::OpenGL && {
qWarning("TestGLGraphicsItem: drawBackground needs a QGLWidget to be set as viewport on the graphics view");
return;
}
float a1 = 0.5f * 1;
float b1 = 0.5f * 1;
// ------------ FBO begin ------------
// !!! additional context for rendering a correct framebufferobject
context
= new QGLContext(QGLFormat(QGL
::SampleBuffers | QGL
::DoubleBuffer | QGL
::AlphaChannel), widget2
);
context->create();
context->makeCurrent();
fbo->bind();
{
// push the projection matrix and the entire GL state before
// doing any rendering into our framebuffer object
glPushAttrib(GL_ALL_ATTRIB_BITS);
{
glViewport(0, 0, fbo->size().width(), fbo->size().height());
glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
{
glOrtho(-1.0, 1.0, -1.0, 1.0, 99, -99);
gluLookAt(0.0, 0.0, 1.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
{
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_QUADS);
glVertex2f(-a1, -b1);
glVertex2f(-a1, b1);
glVertex2f( a1, b1);
glVertex2f( a1, -b1);
glEnd();
}
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
}
glMatrixMode(GL_PROJECTION);
glPopMatrix();
}
glPopAttrib();
}
fbo->release();
fbo->toImage().save("d:\\fbo.bmp");
// ------------ FBO end ------------
// ------------ SZENE begin ------------
painter->beginNativePainting();
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
{
glLoadIdentity();
gluPerspective(70, WIDTH / HEIGHT, 0.01, 1000);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
{
glLoadIdentity();
gluLookAt(0,0,1, // eye
0,0,0, // center
0,1,0); // up
glTranslatef(0, 0, 0);
glEnable(GL_TEXTURE_2D);
{
// !!! bind texture to quad only works without additional content
glBindTexture(GL_TEXTURE_2D, fbo->texture());
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f(-xx, -yy);
glTexCoord2f(1.0f, 0.0f); glVertex2f(-xx, yy);
glTexCoord2f(1.0f, 1.0f); glVertex2f( xx, yy);
glTexCoord2f(0.0f, 1.0f); glVertex2f( xx, -yy);
glEnd();
}
glDisable(GL_TEXTURE_2D);
}
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
}
glMatrixMode(GL_PROJECTION);
glPopMatrix();
painter->endNativePainting();
// ------------ SZENE end ------------
}