Многопоточная опора в грунт для opengl

Мой вопрос, совместим ли поток SOIL (простая библиотека изображений opengl)?

Потому что, когда я запускаю следующий код:

Texture = SOIL_load_OGL_texture (
                 loc.c_str(),
                 SOIL_LOAD_AUTO,
                 SOIL_CREATE_NEW_ID,
                 SOIL_FLAG_POWER_OF_TWO
                 | SOIL_FLAG_MIPMAPS
                 | SOIL_FLAG_MULTIPLY_ALPHA
                 | SOIL_FLAG_COMPRESS_TO_DXT
                 | SOIL_FLAG_DDS_LOAD_DIRECT
                 | SOIL_FLAG_INVERT_Y
             );

(чтобы загрузить текстуру)

вне потока это работает нормально, однако при запуске внутри std::thread выдает ошибку

Необработанное исключение в 0x592527FF (msvcr110d.dll) в Project2.exe: 0xC0000005: расположение чтения нарушения доступа 0x00000000.

Я хочу, чтобы он мог работать с потоками, чтобы он мог загружаться во время экрана меню, или заставки, или чего-то в этом роде. Поэтому мой вопрос: если SOIL не является поточно-ориентированным, то будет ли приемлемым решением запустить поток для запуска меню / заставки / чего-либо еще, чтобы позволить текстурам загружаться в основной поток?

1 ответ

OpenGL является THREAD BOUND! Это означает, что вы можете делать вызовы для своего GL-контекста из одного потока за раз.(Спасибо datenwolf за исправление) Если вышеупомянутый метод использует методы GL, что, я полагаю, делает, тогда он не будет работать если вы не делаете это в отдельном контексте GL. Если вы хотите пойти по многопоточному пути, вы можете создать общий контекст - каждый в отдельном потоке. Затем вы визуализируете в основном потоке, загружая текстуры в другом. Я не уверен, как во многом это касается производительности, но вы все равно можете попробовать.

Другие вопросы по тегам