Совместное использование OpenGL VAO / VBO / и т.д.через QGLWidget - PullRequest
4 голосов
/ 22 апреля 2011

Я использую трехслойную иерархию QGLWidgets для совместного использования шейдеров и данных вершин между 5 областями просмотра OpenGL в моем CAD-подобном приложении. Корневой контекст используется для компиляции шейдеров всего приложения, контекст для каждого документа используется для совместного использования данных вершин модели, а контексты области просмотра - это те, которые фактически выполняют рендеринг (а также содержат данные вершин сетки и другие данные для каждой области просмотра).

Кажется, что совместное использование шейдеров работает нормально, как и рисование сетки, но когда дело доходит до совместного использования данных вершин, оно терпит неудачу и, честно говоря, я не понимаю, как это должно работать ...

Я создал трехмерный значок для элемента, в то время как контекст модели был текущим, так как это был первый VAO, у которого было «имя» 1. Когда я пришел нарисовать объект, контекст окна просмотра (который используется совместно с помните контекст модели), поэтому VAO 1 вызывается, но рисуется VAO 1 области просмотра - моя красивая красная линия сетки. Контексты OpenGL могут быть общими, но как вы можете указать «пространство имен», к которому принадлежит каждый элемент, так как имена не уникальны?

Я пытался сделать контекст модели актуальным непосредственно перед вызовами модели VAO, но нарисованы надлежащий VAO или область просмотра, я думаю, переключение контекста во время блока QPainter :: beginNativePainting () не делает OpenGL счастливым.

Это кажется мне очень простой вещью, поэтому я должен делать что-то глупое - какие-нибудь предложения?

1 Ответ

4 голосов
/ 22 апреля 2011

Благодаря Альфонсу Рейнхарту на форумах OpenGL я теперь знаю, что это потому, что VAO не разделены между контекстами.

...