opengl SOIL库只加载未压缩的dds图像

时间:2017-08-19 21:28:20

标签: c++ opengl opengl-3 soil dds-format

我正在开发一个OpenGL应用程序,为此我想要一个矩形纹理。 我有一个.dds文件并使用SOIL library

如果我将图片加载到我的项目中

 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调试我的progamm。当您使用压缩的.dds文件时,它看起来像SOIL_load_OGL_texture()函数导致的段错误。但我几乎无法想象我是唯一一个使用压缩图像的人。

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

1 个答案:

答案 0 :(得分:2)

我曾经遇到过同样的问题。由于错误发生在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