opengl SOIL 库只加载未压缩的 dds 图像
opengl SOIL library only loads uncompressed dds images
我正在开发一个 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 调试我的程序。使用压缩的 .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
我正在开发一个 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 调试我的程序。使用压缩的 .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