0

私はすでにいくつかのデスクトップ (PC) プロジェクトで stb_image を使用しており、正常に動作していましたが、今はこれを使用していくつかのタグをロードして OpenGL ES で使用しようとしていますが、できません。これは私が使用するコードです:

void TextureManager::LoadFontTexture(const char *filename,int rows,int columns)
{
    glGenTextures(1,&textures[texNum]);
    texNum++;
    glBindTexture(GL_TEXTURE_2D,textures[texNum-1]);
    int x,y,n;
    GLenum format;
    unsigned char *data=stbi_load(filename,&x,&y,&n,0);
    if (data==NULL)
    {
        NSLog(@"Data loaded incorrectly");
        NSLog(@"Failure reason:%s",stbi_failure_reason());
    }
    else {
        NSLog(@"Width:%d height:%d",x,y);
    }
    if (n==3)
    {
        format=GL_RGB;
    }
    else if (n==4)
    {
        format=GL_RGBA;
    }  
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    glTexImage2D(GL_TEXTURE_2D,0,n,x,y,0,format,GL_UNSIGNED_BYTE,data);
}

このコードはデスクトップでは正常に機能しましたが、この画像で何かをテクスチャリングしようとすると、黒い四角が表示されます。幅と高さの値は正しく、常に (n==4) if が呼び出されます (画像にはアルファ チャネルがあるため、これは正しいです)。何が悪いのかわかりません。format=GL_BGRA を使用して format=GL_RGBA を変更しようとしましたが、機能しません

4

1 に答える 1

2

glTexImage2D 呼び出しは次のようになります。

glTexImage2D(GL_TEXTURE_2D,0,format,x,y,0,format,GL_UNSIGNED_BYTE,data);

3 または 4 は、OpenGL ES の internalformat の有効な値ではありません。ここのドキュメントを参照してください: http://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexImage2D.xml

編集:OpenGLエラーを検出する方法の詳細は次のとおりです:

このタイプのエラーを検出するには、glGetError 関数を使用します。どの関数が失敗したかがわかります。たとえば、次のマクロを作成します。

#define GL_CHECK(x) do {
    x;
    GLenum glerr = glGetError();
    if (glerr != GL_NO_ERROR) {
        NSLog(@"OpenGL error: %d, file: %s, line: %d", glerr, __FILE__, __LINE__);
    }
} while (0)

次に、次のようにすべての OpenGL 関数で使用します。

GL_CHECK( glTexImage2D(GL_TEXTURE_2D,0,n,x,y,0,format,GL_UNSIGNED_BYTE,data) );

これにより、ファイル名と行番号を含むエラーの場所がすぐにわかります。もちろん、アプリケーションを出荷するときは、リリース モードでのチェックを無効にします。別のマクロを使用するだけです:

#define GL_CHECK(x) x;
于 2012-04-15T19:36:23.513 に答える