Can't draw texture outside paintGL in QGLWidget!

Hi. I have a problem with drawing outside paintGL():

void SQ_GLWidget::slotShowImage(int)
{
int z;
QCString cstr;
cstr.resize(sdev->bytesAvailable());
sdev->readBlock(cstr.data(), sdev->bytesAvailable());
QString str = cstr;
sdev->flush();
int kk = str.toInt();
for(z = parts->tilesx * kk;z < parts->tilesx * (kk+1);z++)
{
glBindTexture(GL_TEXTURE_2D, parts->m_parts[z].tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, 4, SQ_DIV, SQ_DIV, 0, GL_RGBA, GL_UNSIGNED_BYTE, parts->m_parts[z].part);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, parts->m_parts[z].tex);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f(parts->m_parts[z].x1, parts->m_parts[z].y1);
glTexCoord2f(1.0f, 0.0f); glVertex2f(parts->m_parts[z].x2, parts->m_parts[z].y1);
glTexCoord2f(1.0f, 1.0f); glVertex2f(parts->m_parts[z].x2, parts->m_parts[z].y2);
glTexCoord2f(0.0f, 1.0f); glVertex2f(parts->m_parts[z].x1, parts->m_parts[z].y2);
glEnd();
glDisable(GL_TEXTURE_2D);
}
}


Result: Texture is invisible ! The same code in paintGL() works fine.

Yes, your GL context is only guaranteed to be current during paintGL. The code would probably crash on the Mac. Also, you’re not swapping your buffers.

You can either call makeCurrent and swapBuffers yourself from your slot, or call setNeedsRepaint (or whatever it’s called) on yourself so you get a paint event (recommended).

This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.