2017-08-19 19 views
0

非圧縮DDS画像をロードします。 私は.ddsファイルを持っていて、SOIL libraryを使用しています。私は私のプロジェクトに画像をロードする場合は、画像が(DXT3、DXT5)圧縮されている場合のOpenGL SOILライブラリは、私だけがOpenGLアプリケーション上で、私は矩形をテクスチャにしたい、その目的のために働いています

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); 

    [...] 
} 

私のアプリケーションはすぐにクラッシュします。圧縮されていないと、すべて正常に動作します。

その理由は何ですか? SOILは圧縮された.ddsファイルを公式Webサイトに準拠してサポートする必要があります。

EDIT 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

あなたはSOILプロジェクトソースにリンクし、それが失敗した場所を見つけるために、デバッガを使用してみましたか? – Robinson

答えて

2

私はかつて同じ問題を抱えていました。エラーがSOIL_load_OGL_texture()で発生しているので、最も可能性の高い土壌が内部的に使用していますが、これは、OpenGL 3.0で廃止されましたglGetString(GL_EXTENSIONS)によって引き起こされます。ここではSOILの固定バージョンを見つけることができます:https://github.com/njcrawford/Simple-OpenGL-Image-Library/tree/issue-8-attempt2

しかし、私はSOILを使用しないことをお勧めします。これは、現在10年近く更新されていないためです。私はうまく機能し、SOILと同じ形式をサポートしていstb_imageを使用しています:https://github.com/nothings/stb

+0

答えをありがとう!私は、ほとんどの 'SOIL_load_OGL'関数に同じ問題があることに気付きました。今私は問題が何であるか知っています。私が使用していた冒頭 ** stb_image **としても残念ながら、それは.ddsファイルをサポートしていません。または私は間違っていますか?それが唯一の理由ですので、私は取っ** SOIL ** –

+1

@linux_lover:問題が修正されました場合は、[SOIL2](https://bitbucket.org/SpartanJ/soil2)を参照するかどうかをチェックできます。 – genpfault

関連する問題