Библиотека opengl SOIL загружает только несжатые изображения dds

Я работаю над приложением OpenGL, и для этой цели я хочу текстурировать прямоугольник. У меня есть файл .dds, и я использую библиотеку SOIL.

Если я загружу изображение в свой проект

 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.

EDIT 1: Хорошо, я попытался отладить свою программу, используя gdb и valgrind. Это похоже на ошибку сегментации, вызванную функцией SOIL_load_OGL_texture(), как только вы используете сжатый файл .dds. Но я с трудом могу себе представить, что я единственный, кто когда-либо использовал сжатые изображения.

Вывод ГБД:

 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

person linux_lover    schedule 19.08.2017    source источник
comment
Пробовали ли вы связываться с исходным кодом проекта SOIL и использовать отладчик, чтобы выяснить, где он терпит неудачу?   -  person Robinson    schedule 20.08.2017


Ответы (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

person Leon2806    schedule 22.08.2017
comment
Спасибо за ответ! Я заметил, что у большинства функций SOIL_load_OGL такая же проблема. Теперь я знаю, в чем дело. Вначале я также хотел использовать stb_image, но, к сожалению, он не поддерживает файлы .dds. Или я ошибаюсь? Потому что это единственная причина, по которой я взял ПОЧВУ - person linux_lover; 22.08.2017
comment
@linux_lover: проверьте SOIL2, чтобы узнать, устранена ли проблема. - person genpfault; 22.08.2017