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