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文件。

编辑1:好的,我尝试使用gdb和valgrind调试我的程序。它看起来像是使用压缩.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

我曾经遇到过同样的问题。由于错误发生在SOIL_load_OGL_texture()因此很可能是由 SOIL 内部使用但已在 OpenGL 3.0 中弃用glGetString(GL_EXTENSIONS)引起的。你可以在这里找到SOIL的固定版本:https://github.com/njcrawford/Simple-OpenGL-Image-Library/tree/issue-8-attempt2

但是,我建议不要使用SOIL,因为它已经有近十年没有更新了。我正在使用stb_image它运行良好并支持与 SOIL 相同的格式:https://github.com/nothings/stb

最新更新