Я работаю над приложением OpenGL и для этой цели я хочу текстурировать прямоугольник.
У меня есть файл .dds и я использую ПОЧВА библиотека.
Если я загружу изображение в свой проект
void setTexture( const std::string& t_filename )
{
GLuint m_TEX = SOIL_load_OGL_texture(
t_filename.c_str(),
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_DDS_LOAD_DIRECT);
[...]
}
мое приложение сразу падает, если изображение сжато (DXT3, DXT5). Если это несжатый, все работает как ожидалось.
Что может быть причиной этого? SOIL должен поддерживать сжатые файлы .dds в соответствии с официальным сайтом.
РЕДАКТИРОВАТЬ 1:
Хорошо, я попытался отладить мою программу, используя gdb и valgrind. Похоже, что ошибка вызвана SOIL_load_OGL_texture()
функционировать, как только вы используете сжатый файл .dds. Но я с трудом могу себе представить, что я единственный, кто когда-либо использовал сжатые изображения.
Вывод GDB:
Program received signal SIGSEGV, Segmentation fault.
0x00007f469cd03197 in __strstr_sse2 () from /usr/lib/libc.so.6
#0 0x00007f469cd03197 in __strstr_sse2 () from /usr/lib/libc.so.6
#1 0x00007f469d8daa2d in query_DXT_capability () from /usr/lib/libSOIL.so.1
#2 0x00007f469d8dc19f in SOIL_direct_load_DDS_from_memory () from /usr/lib/libSOIL.so.1
#3 0x00007f469d8dcaad in SOIL_direct_load_DDS () from /usr/lib/libSOIL.so.1
#4 0x00007f469d8dcb66 in SOIL_load_OGL_texture () from /usr/lib/libSOIL.so.1
У меня была одна и та же проблема. Так как ошибка возникает в SOIL_load_OGL_texture()
это, скорее всего, вызвано glGetString(GL_EXTENSIONS)
какой SOIL использует внутри, но который устарел в OpenGL 3.0. Вы можете найти исправленную версию SOIL здесь: https://github.com/njcrawford/Simple-OpenGL-Image-Library/tree/issue-8-attempt2
Тем не менее, я бы посоветовал не использовать SOIL, так как он не обновлялся уже почти десять лет. Я использую stb_image, который работает хорошо и поддерживает те же форматы, что и SOIL: https://github.com/nothings/stb
Других решений пока нет …