Я подкласс QGLWidget и мой код рисования в paintEvent вместо paintGL, так как я хочу рисовать 2D-оверлей, используя QPainter поверх моих 3D-объектов, выполненных с OpenGL.
Моя буферизация глубины работает нормально, когда яиметь оверлейЕсли наложение нарисовано, мой буфер глубины становится AWOL: я вижу вещи, которые должны быть скрыты объектами спереди.
initializeGL выглядит так:
qglClearColor(Qt::black);
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
Структура моего paintEventкод выглядит следующим образом:
makeCurrent();
...openGLStuff...
if (I need my overlay)
{
glPushAttrib(GL_ALL_ATTRIB_BITS);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
QPainter painter(this);
... do QPainter stuff ...
glPushAttrib(GL_ALL_ATTRIB_BITS);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
}
swapBuffers();
В зависимости от if, одна и та же сцена выглядит хорошо (наложение выключено) или неправильно (наложение включено).Помимо странной проблемы с буфером глубины, он работает отлично.
Мое (дикое) предположение - то, что конструкция QPainter отключает буферизацию глубины.Любая подсказка будет принята с благодарностью.Я полагаю, что альтернативным решением было бы преобразовать мой оверлей в текстуру и смешать его с OpenGL.