Мой вопрос, совместим ли поток 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 не является поточно-ориентированным, то будет ли приемлемым решением запустить поток для запуска меню / заставки / чего-либо еще, чтобы позволить текстурам загружаться в основной поток?
OpenGL является THREAD BOUND! Это означает, что вы можете делать вызовы для своего GL-контекста из одного потока за раз. (Спасибо datenwolf за исправление) Если вышеупомянутый метод использует методы GL, что, я полагаю, делает, тогда он не будет работать если вы не делаете это в отдельном контексте GL. Если вы хотите пойти по многопоточному пути, вы можете создать общий контекст — каждый в отдельном потоке. Затем вы визуализируете в основном потоке при загрузке текстур в другом. Я не уверен, как во многом это касается производительности, но вы все равно можете попробовать.
Других решений пока нет …