Я создаю приложение, подобное САПР (на основе Qt), это будет интерфейс с несколькими документами, и каждый документ будет содержать около 5 видовых экранов (полученных из QGLWidget). Поэтому мне нужно, чтобы мой плоский шейдер делился по всему приложению, а затем 3D-активы (модели, хранящиеся как VBOs), были разделены между каждым документом, то есть 5 видовых экранов.Стратегия совместного использования ресурсов OpenGL
Я думал, что до тех пор, пока я разделял программу шейдеров, и VBO GLuint-адреса все будут работать автоматически - это не так. Я думаю, потому что каждый видовой экран/контекст имеет собственное адресное пространство на графической карте, если кто-то знает лучше, пожалуйста, сообщите!
Я хотел бы иметь шейдер, скомпилированный при запуске приложения, но это сложно, поскольку мне нужен действительный QGLWidget, чтобы предварительно получить OpenGL в правильное состояние. Но поскольку мне нужно разделить QGLWidgets (через их конструктор), чтобы они обменивались ресурсами, нужно создать и показать, прежде чем другие могут быть созданы. Но это крайне нецелесообразно, поскольку сразу несколько представлений сразу отображаются пользователю.
Это должно быть проще, чем я это делаю, потому что это не новаторский материал, но я действительно борюсь - может ли кто-нибудь указать мне в правильном направлении?
Спасибо, Cam
Отлично! QGLContext немного изолирован, метод create может запускаться только после создания устройства отображения, которое в моем случае находится внутри QGLWidget. Поэтому я создам _invisible_ QGLWidget как мой контекст компиляции шейдеров, а затем передаю это как const QGLWidget * shareWidget arg в конструкторе скрытого QGLWidget документа, который содержит данные VBO, и этот виджет затем передается в видимый вид QGLWidgets. По существу создание иерархии дерева QGLWidget. Создание невидимых компонентов графического интерфейса вряд ли является стильным, но это сэкономит много времени, когда дело доходит до портирования. – cmannett85 2010-12-06 19:51:01