yuan-cheng
25th April 2014, 09:55
Hi everyone
I'm using QGraphicsView drawbackground() to draw my openGL texture
void
Gview::drawBackground(QPainter *painters, const QRectF &rect)
{
if(isFirstImg){
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glBindTexture( GL_TEXTURE_2D, texture[0] );
glTexImage2D(GL_TEXTURE_2D,
0,
GL_RGB,
1920,
1080,
0,
GL_RGB,
GL_UNSIGNED_BYTE,
m_rgbSrc );
isFirstImg = false;
}else
{
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glBindTexture( GL_TEXTURE_2D, texture[0] );
glTexSubImage2D(GL_TEXTURE_2D,
0,
0,
0,
1920,
1080,
GL_RGB,
GL_UNSIGNED_BYTE,
m_rgbSrc);
}
glViewport(0,0,(GLint)this->width(), (GLint)this->height());
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glBegin(GL_QUADS);
{
glTexCoord2f(0.0f, 1.0f);glVertex2f(-1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f);glVertex2f( 1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f);glVertex2f( 1.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f);glVertex2f(-1.0f, 1.0f);
}
glEnd();
glDisable(GL_TEXTURE_2D);
glFlush();
isUpdated = false;
}
and I add some GUI in QGraphicsScene in QGraphicsView.
m_scene = new QGraphicsScene();
m_view = new Gview();
m_view->setViewportUpdateMode(
QGraphicsView::BoundingRectViewportUpdate);
m_view->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
m_view->setVerticalScrollBarPolicy ( Qt::ScrollBarAlwaysOff );
m_view->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
m_view->setGraphicsScene(m_scene);
m_view->setGeometry(50,50,300,300);
m_view->show();
QDialog *dialog = new QDialog(0);
dialog->setWindowOpacity(0.5);
dialog->setLayout(new QVBoxLayout);
dialog->layout()->addWidget(new QLabel("Hello!"));
dialog->layout()->addWidget(new QPushButton("Ok", 0));
m_scene->addWidget(dialog, dialog->windowFlags());
sometime the texture is fine, sometime it isn't.
the openGL texture usually disappear in my window and remain the QDialog, if I shut the QDialog window when the programe is running, the openGL texture will be appeared.
so what's the problem??
thanks you help.
I'm using QGraphicsView drawbackground() to draw my openGL texture
void
Gview::drawBackground(QPainter *painters, const QRectF &rect)
{
if(isFirstImg){
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glBindTexture( GL_TEXTURE_2D, texture[0] );
glTexImage2D(GL_TEXTURE_2D,
0,
GL_RGB,
1920,
1080,
0,
GL_RGB,
GL_UNSIGNED_BYTE,
m_rgbSrc );
isFirstImg = false;
}else
{
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glBindTexture( GL_TEXTURE_2D, texture[0] );
glTexSubImage2D(GL_TEXTURE_2D,
0,
0,
0,
1920,
1080,
GL_RGB,
GL_UNSIGNED_BYTE,
m_rgbSrc);
}
glViewport(0,0,(GLint)this->width(), (GLint)this->height());
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glBegin(GL_QUADS);
{
glTexCoord2f(0.0f, 1.0f);glVertex2f(-1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f);glVertex2f( 1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f);glVertex2f( 1.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f);glVertex2f(-1.0f, 1.0f);
}
glEnd();
glDisable(GL_TEXTURE_2D);
glFlush();
isUpdated = false;
}
and I add some GUI in QGraphicsScene in QGraphicsView.
m_scene = new QGraphicsScene();
m_view = new Gview();
m_view->setViewportUpdateMode(
QGraphicsView::BoundingRectViewportUpdate);
m_view->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
m_view->setVerticalScrollBarPolicy ( Qt::ScrollBarAlwaysOff );
m_view->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
m_view->setGraphicsScene(m_scene);
m_view->setGeometry(50,50,300,300);
m_view->show();
QDialog *dialog = new QDialog(0);
dialog->setWindowOpacity(0.5);
dialog->setLayout(new QVBoxLayout);
dialog->layout()->addWidget(new QLabel("Hello!"));
dialog->layout()->addWidget(new QPushButton("Ok", 0));
m_scene->addWidget(dialog, dialog->windowFlags());
sometime the texture is fine, sometime it isn't.
the openGL texture usually disappear in my window and remain the QDialog, if I shut the QDialog window when the programe is running, the openGL texture will be appeared.
so what's the problem??
thanks you help.