2

この回答を使用して、イメージを .exe に埋め込みます。

GCC を使用して実行可能ファイルにリソースを埋め込む

これが私のコードの関連ビットです:

GLuint grass_DTexture;

extern char binary_grass_D_bmp_start[];
extern char binary_grass_D_bmp_size[];

short loadTexture(char *imageData[], GLuint *texture) {
    *texture = SOIL_load_OGL_texture_from_memory(imageData, sizeof(*imageData), SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

    return 1;
}

loadTexture(&binary_grass_D_bmp_start, &grass_DTexture);

ただし、テクスチャが読み込まれず、白っぽいグレーのサーフェスが表示されます。

編集:これが私の最初の質問ではないことはわかっていますが、ミップマップの使用に問題があります。loadTexture 関数を次のように変更しました: short loadTexture(char *imageData[], Gluint *texture, int width, int height) { glEnable(GL_TEXTURE_2D); glGenTextures(1, テクスチャ); glBindTexture(GL_TEXTURE_2D, *テクスチャ);

    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

    *texture = SOIL_load_OGL_texture_from_memory(imageData, sizeof(*imageData), SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y | SOIL_FLAG_COMPRESS_TO_DXT | SOIL_FLAG_MIPMAPS);

    //gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, GL_RGB, GL_UNSIGNED_BYTE, imageData);

    //glTexStorage2D(GL_TEXTURE_2D, 3, GL_RGBA8, width, height);
    //glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_BGRA, GL_UNSIGNED_BYTE, imageData);
    //glGenerateMipmap(GL_TEXTURE_2D);

    glDisable(GL_TEXTURE_2D);
    return 1;
}

今回は、exe を実行するとすぐにクラッシュします。また、次の警告が表示されますが、これが原因である可能性があります (おそらく * または & が欠落している可能性があります)。

init.c:76:2: warning: passing argument 1 of 'loadTexture' from incompatible poin
ter type [enabled by default]
loadTexture.h:1:7: note: expected 'char **' but argument is of type 'char (*)[]'

クラッシュを SOIL_load_OGL_texture_from_memory 呼び出しに絞り込むことができました。

4

1 に答える 1

2
于 2013-07-15T13:34:11.880 に答える