Название: [РЕШЕНО]QGraphicsView, QGraphicsItem, OpenGL Отправлено: klou от Декабрь 23, 2010, 14:31 В QGraphicsView::drawBackground() (QGraphicsView унаследован) содержится код прорисовки фона с использованием OpenGL.
Фон отображается, однако не рисуются добавленные в сцену QGraphicsItem. При замене вьюпорта (setViewport()) на QWidget вместо QGLWidget, QGraphicsItem рисуются нормально (но, естественно, нет фона). В "тепличных" условиях (отдельный проект VS для проверки именного этого явления) объекты нормально рисуются на фоне отрисованном OpenGL. У кого-нибудь был подобный опыт? Или может есть идеи? Название: Re: QGraphicsView, QGraphicsItem, OpenGL Отправлено: klou от Январь 11, 2011, 12:37 После новогодних праздников обнаружил:
Код: void QMyGraphicsView::drawBackground( QPainter * painter, const QRectF & rect ) Код: void QMyGraphicsView::drawBackground( QPainter * painter, const QRectF & rect ) Название: Re: QGraphicsView, QGraphicsItem, OpenGL Отправлено: alexman от Январь 11, 2011, 12:40 Попробуй обернуть нативные вызовы методами:
Код: void QPainter::beginNativePainting () Название: Re: QGraphicsView, QGraphicsItem, OpenGL Отправлено: klou от Январь 11, 2011, 13:24 Код: void QMyGraphicsView::drawBackground( QPainter * painter, const QRectF & rect ) glGetError() показал ошибку "недопустимое значение". Возможно на выводе изображения сказывается где-то ранее произошедшая ошибка. Название: Re: QGraphicsView, QGraphicsItem, OpenGL Отправлено: klou от Январь 11, 2011, 13:36 Наврал про "без изменений" - теперь и треугольник не рисуется ;D
Название: Re: QGraphicsView, QGraphicsItem, OpenGL Отправлено: klou от Январь 11, 2011, 13:44 "Сбросил" матрицы:
Код: glMatrixMode(GL_MODELVIEW); Название: Re: QGraphicsView, QGraphicsItem, OpenGL Отправлено: twp от Январь 11, 2011, 13:58 я так понимаю что
Код: painter->fillRect(rect,QBrush(QColor(Qt::yellow))); заполняет фон, а потом рисуюется треугольник. тогда в такой же последовательности нужно делать вызова как в примере http://doc.qt.nokia.com/latest/qpainter.html#beginNativePainting (http://doc.qt.nokia.com/latest/qpainter.html#beginNativePainting) Название: Re: QGraphicsView, QGraphicsItem, OpenGL Отправлено: klou от Январь 11, 2011, 14:57 Я "внутри" поковырялся немного.
"Фон" рисуется посредством glDrawArrays - выводятся два треугольника (GL_TRIANGLES_STRIP), которые покрывают клиентскую часть окна - получается "типа фон". Мне на данный момент не принципиально, если "фон" покроет треугольник. На данный момент нужно разобраться, почему painter не рисует. Название: Re: QGraphicsView, QGraphicsItem, OpenGL Отправлено: klou от Январь 12, 2011, 08:31 Выяснил в чём была загвоздка. На самом деле QPainter рисовал, но предварительно (в конструкторе QMyGraphicsView) было включено отсечение невидимых граней:
Код: glEnable(GL_CULL_FACE); +1 в копилку опыта :) p.s. Item-ы тоже стали отображаться. |