Я хочу отобразить сцену с различными точками зрения во многих QOpenGLWidget, которые находятся в одном окне (разделенные архитектурой QSplitter). Важно то, что я хочу хранить данные сцены (геометрию и текстуры) только один раз на графическом процессоре. Но каждый QOpenGLWidget имеет собственный QOpenGLContext.Глобальный контекст OpenGL для рендеринга в fbo для отображения во многих QOpenGLWidget
Моя идея состояла в создании независимого контекста, который визуализирует сцену в объекте FrameBufferObject (не QFrameBufferObject) и использует полученную текстуру в соответствующем QOpenGLWidget.
Более технически, мой подход заключался в создании нового QOpenGLContext и QOffscreenSurface. Но когда я хочу использовать полученные QOpenGLFunctions, данные моим QOpenGLContext, он останавливается с ошибкой сегментации, даже если я проверил, что мой созданный QOpenGlContext действителен.
В более общем смысле мне трудно понять роль QOpenGLContext, поверхности (QOffscreenSurface в моем случае) и функции makeCurrent.
Моя просьба - понять, что является хорошим способом сделать это и почему я получаю ошибку сегментации.
Обратите внимание, что все QOpenGLWidgets в одном и том же окне верхнего уровня уже обмениваются друг с другом, поскольку они совместно используют внутренний контекст GL, используемый Qt для «компоновки» самого окна (сборка в виде 2D-текстур QOpenGLWidgets, другие виджеты и т. д.). Поэтому вам не нужно делать ничего особенного, чтобы делиться вещами между этими контекстами. Более того, есть даже флаг, чтобы эти контексты были распространены среди всех окон верхнего уровня вашего приложения. – peppe
Да, но даже если общий, объекты массива вершин не являются! Я действительно хочу избежать таких проблем. Вы не думаете, что рендеринг текстуры - хорошее решение для централизации моего рендеринга? –
Конечно, вы можете это сделать, если хотите. Опять же, ФБО не будут разделяться, но фоновые текстуры или рендерингбуферы будут. – peppe