2016-07-20 4 views
1
glGenTextures(1, &bigTex); 
glBindTexture(GL_TEXTURE_2D, bigTex); 
u32 mipmapLevel = max(0, (int)greaterOrEqualPowerOfTwoExponent(max(packing.bounds.x, packing.bounds.y)) - 4); 
glTexImage2D(GL_TEXTURE_2D, mipmapLevel, GL_ALPHA, texSpan.x, texSpan.y, 0, GL_ALPHA, GL_UNSIGNED_BYTE, dat); 
glGenerateMipmap(GL_TEXTURE_2D); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

これは、空白(および不透明)のテクスチャを生成しているようです。 mipmapLevelを0に設定してミップマップを無効にすると、通常通りレンダリングされますが、もちろんミップマップはありません。gles2のミップマップが空白になっています。

答えて

0

glImage2dのミップマップレベルの引数は、あなたが考えるとは限りません。これは、datのミップマップレベルを指定します。これは、bigTexに関連付けられた最低のミップマップレベルではありません。そのため、bigTexの5番目のミップマップレベルを定義したいということです。 bigTexの5番目のミップマップレベルは決して見ることができません。より高いミップマップレベルを決して定義していないので、すべてが空白に見えます。

datは最も詳細なレベル(0)なので、それはあなたが定義するレベルです。だから、mipmapLevelを取り除く、と

glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, texSpan.x, texSpan.y, 0, GL_ALPHA, GL_UNSIGNED_BYTE, dat); 

を行いますが、これが機能することを見てきましたが、あなたはダウンスケーリングの結果は良く見ていないので、それはミップマッピングを無効にすることだと思います。その時点で、ミップマップが有効である必要があります。 GL_LINEARの代わりにGL_TEXTURE_MIN_FILTERをGL_LINEAR_MIPMAP_NEARESTに設定し、glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST);をスローすると、それが表示されます。

関連する問題