У меня есть приложение Qt OpenGL, которое использует QOpenGLWidget
для рендеринга контента. В другом классе (назовем его Resources
) я хочу создать для этого виджета ресурсы OpenGL, такие как VBO, VAO, шейдерные программы и т. д. Этот метод создания вызывается не QOpenGLWidget
, а внешним вызывающим объектом.
По какой-то причине в моем приложении существует два контекста OpenGL (один, вероятно, используется для графического интерфейса, а другой для QOpenGLWidget
). Следовательно, когда вызывается метод создания ресурса, я не могу быть уверен, что правильный контекст активен. Поэтому, когда я звоню
QOpenGLVertexArrayObject vao;
vao.create();
в классе Resources я не могу быть уверен, что этот VAO создан в правильном контексте. Класс Resources не имеет доступа к виджету. Таким образом, context.makeCurrent()
назвать нельзя (потому что я не знаю поверхности).
Есть ли прямой способ указать контекст, в котором должны создаваться ресурсы? Хранение поверхности в файле ресурсов (вместе с контекстом) кажется очень неаккуратным.
yourOpenGLWidget->makeCurrent()
перед инициализацией ресурсов GL? - person peppe   schedule 11.05.2016