Есть ли способ безопасно связывать текстуры, используя OpenGL в рабочей нити приложения QT GUI?

В настоящее время я работаю над проектом программного обеспечения GUI для визуализации 3D-сцен с использованием Qt. GUI позволяет пользователю загружать партии 3D-файлов данных, таких как .obj с некоторой поддержкой .mtl и .stl, а также 2D-файлы изображений в сцену как объекты класса SceneObject, которые отображаются на виджете QGLWidget.

Когда я загружаю их в партии в основной резьбе GUI, длительное время загрузки заставляет GUI замораживаться, что уродливо. Я попробовал выполнить загрузку на отдельной резьбе, но есть один большой улов: при загрузке .obj Textures или файлов изображений, я также выполню привязку, используя OpenGL GLBIndTexture () сразу после загрузки каждого изображения или текстуры, чтобы мне только нужно было сохранить Идентификаторы текстуры в каждом экземпляре CaskeObject. Когда я пытался выполнить нагрузку в рабочей нити, вся программа будет просто сбой.

Я прочитал, что каждый нить может получить доступ только к одному контексту OGL и переключение контекста по темам - это один, но опасный способ достижения того, что я хотел сделать. Другим возможным способом было бы выполнять привязку текстуры на рецепте GUI после завершения загрузки, но это будет означать полный повторный дизайн на моем классе CaskeBject: (

может ли кто-нибудь дать мне несколько советов о том, как реализовать погрузку нагрузки для загрузки Активы в сцену OpenGL?

6
задан ksming 13 September 2011 в 09:21
поделиться