2

アンドロイドでは、このコードを使用すると機能します:

glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA_EXT, content.width, content.height, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, content.pixels);

しかし、iOS では動作しません。このコードは 64 *64(power of 2) しか描画しません。

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, content.width, content.height, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, content.pixels);

どうやって ?

とても感謝しています!!!

4

3 に答える 3

1

glTexImage2D通話の前にこれを使用してください:

// Use tightly packed data
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

詳細はこちら: http://www.khronos.org/opengles/sdk/1.1/docs/man/glPixelStorei.xml

[...]GL_PACK_ALIGNMENT メモリ内の各ピクセル行の開始位置の配置要件を指定します。許容値は、1 (バイト境界)、2 (偶数バイトに位置合わせされた行)、4 (ワード境界)、および 8 (ダブルワード境界から始まる行) です。初期値は4です。 [...]

これは、すべてのデバイスで利用できるわけではありません。しかし、現在ターゲットにされている深刻なデバイスは、それをサポートする必要があります。ただし、この方法に残る 1 つの欠点は、OpenGL 読み取りバッファーが一度に 1 バイトしか読み取れないことです。したがって、デフォルト値 4 の代わりに 1 を使用すると、呼び出しglTexImage2Dはおそらく約 4 倍遅くなります。もちろん、データはメモリ内で適切に配置されていませんが、これは問題にはなりません。ただし、63x63 テクスチャを使用することの欠点は、64x64 テクスチャをロードしてテクスチャ座標を調整するよりもはるかに悪いため、サイズが 2 の累乗のテクスチャを使用することをお勧めします。

于 2013-10-03T11:16:11.437 に答える
0

テクスチャのサイズは、GPU と OpenGL ES の実装によって異なります。iOS では、Power of 2 テクスチャのみが受け入れられます。また、PVR 形式では、Power of 2 サイズの Square Texture のみが受け入れられます。実装する前に、彼らのドキュメントを読む必要があります。ただし、クロスプラットフォームの場合は、正方形のテクスチャで Power of 2 を使用することをお勧めします。

于 2013-09-26T09:10:59.337 に答える
0

思い出すと、iOS OpenGLES2 は 2 の累乗でないテクスチャを描画できますが、場合によってはそれらを描画しません。最初に、圧縮されていないテクスチャについて話しているのは、それがコードでやろうとしていることだからです。第二に、あなたは多くの情報を提供しませんでした。「うまくいかない」って具体的にどういうこと?うまくいかないということは、黒いテクスチャが得られていることを意味すると思います。

たとえば、次のように指定した場合、mipmap の不一致が発生する可能性があります。

            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

テクスチャにミップ マップ レベルがない場合にミップ マップ最小スケール フィルタを指定すると、テクスチャが黒くなります。実際には、2 乗でないテクスチャではミップマップをまったく使用できません。

もう 1 つの問題は、非べき乗 2 テクスチャで GL_REPEAT を使用できないことです。Power 2 以外のテクスチャに対して iOS でこれを行うことはできません。

        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
                        GL_REPEAT);

代わりにこれを行うことができます:

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
        GL_CLAMP_TO_EDGE);

お役に立てれば。

于 2013-09-30T18:18:57.093 に答える