2017-03-25 13 views
0

Androidデバイス(Samsung N5100タブレット)のいずれかでテクスチャ(フォントアトラス用)を生成しようとして問題が発生しました。以下のコードはiOSとSamsung S4で正常に動作します。OpenGL ES2.0 glTexImage2D()はGL_INVALID_VALUEを返します

glTextImage2D()はGL_INVALID_VALUEを返し続けます。

私はそれが2つの問題のパワーだと思っていましたが、私は2値のさまざまなパワーをハードコーディングしようとしましたが、それは失敗を続けます。 GL_MAX_TEXTURE_SIZEは4096の値を返しますが、16x16を動作させることさえできません。

glActiveTexture(GL_TEXTURE0); 
    glGenTextures(1, &m_TextureAtlasStrip); 
    glBindTexture(GL_TEXTURE_2D, m_TextureAtlasStrip); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 

    if(CheckGLError()) 
    LogDebugf("FAIL(9)"); 

    GLint f = 0; 
    glGetIntegerv(GL_MAX_TEXTURE_SIZE, &f); 
    LogDebugf("GL_MAX_TEXTURE_SIZE: %d", f); 

    if(CheckGLError()) 
    LogDebugf("FAIL(9F)"); 

//nPow2RoundWidth = 2048; 
//nPow2RoundWidth = 1024; 
//nPow2RoundWidth = 512; 
nPow2RoundWidth = 16; 
nPow2RoundHeight = 16; 
LogDebugf("nPow2RoundWidth: %d nPow2RoundHeight: %d", nPow2RoundWidth, nPow2RoundHeight); 

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, nPow2RoundWidth, nPow2RoundHeight, 0, GL_RED, GL_UNSIGNED_BYTE, 0); 

    if(CheckGLError()) 
    { 
    LogDebugf("AT FAIL(10)"); 
    exit(1); 
    } 

    LogDebugf("WORKED AT (10)"); 
    exit(1); 

この原因は何ですか?

UPDATE: 私はそれが動作GL_RGBするGL_REDを変更した場合は... spec

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, nPow2RoundWidth, nPow2RoundHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 
+0

OpenGL ES 2.0では、GL_LUMINANCEとGL_LUMINANCE_ALPHAはうまく動作します。フェッチされた値は、シェーダコード内の何にでも使用できます。 GL_LUMINANCE(単一値)、GL_LUMINANCE_ALPHA(2つの値)、GL_RGB(3つの値)、GL_RGBAの順番に固執する傾向があります。 – WLGfx

答えて

2

表3.8は、internalformatglTexImage2D

formatの有効な値は、彼らは、GL_ALPHAあるGL_LUMINANCEを定義しますGL_LUMINANCE_ALPHA,GL_RGBおよびGL_RGBA

あなたが達成しようとしているものによっては、おそらくGL_LUMINANCEまたはGL_ALPHAが適切な代用品であることがわかります。

また、this extensionは赤色(赤緑色)のテクスチャをサポートしていますが、これはかなり一般的だと思いますが、どこにでもありません。

+0

ありがとうございます - GL_ALPHAが必要です。私は以下の例を使用しています(GL_ALPHAも使用しています)。なぜGL_RGBがそこにあったのか分かりませんが、それは1年以上前に起こったでしょう。 [翻訳] – SparkyNZ

関連する問題