Хозяйке на заметку: Qt, OpenGL и PBO
lexa - 20/Дек/2012 13:34
В режиме записок: на этой проблеме впустую потерял дня два минимум, если не больше. Вот, чтобы никогда более, запишу.
(ну чуть побольше кода, потому что прозрачность, возможность двигать, но смысл именно такой)
Вот есть QGraphicsView, направленный в QGLWidget. Есть еще QGraphicsScene, у которой с помощью drawBackground() рисуем нужное нам (картинку).
Этот самый drawBackground() использует текстуры, одну или много, текстуры залиты через PBO.
Дальше - пытаюсь вывести на эту Scene другие объекты. Ну, как в документации написано, к примеру так:
QLabel *label = new QLabel("Bla-Bla");
scene->addWidget(label);
scene->addWidget(label);
Результат:
- Если объекты выводятся, окно открывается и т.п. до создания "моих" текстур (которые рисуются на фоне) - то все отлично.
- Если все разлеглось так, что свои текстуры и PBO я создал до первого показа (даже не создания) объекта на Scene, то жопа, при добавлении элемента к сцене получаем такое:
texture upload failed, error code 0x502
Если вы работали с QOpenGLBuffer, то прежде чем отдать управление в Qt - сделайте ему release(). Иначе будет нехорошо.
И ведь натыкался я уже на подобное, но с VBO: если не отцепить их, то вообще ничего не работает.