6

初期化コードは、128x128ピクセルのRGB単色テクスチャを1つ作成します。

GLES20.glGenTextures ( 1, textureId, 0 );
GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, textureId[0] );
GLES20.glTexImage2D ( GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGB, bitmap.getWidth(), bitmap.getHeight(), 0,GLES20.GL_RGB, GLES20.GL_UNSIGNED_BYTE, byteBuffer );|
GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, 0 );

初期化後、適切なテクスチャがあり、すべてが正常に機能します。いくつかのポイントでは、テクスチャにいくつかの変更を加えるか、他の画像に完全に置き換える必要があります。

GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, textureId[0] );
GLES20.glTexImage2D ( GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGB, bitmap.getWidth(), bitmap.getHeight(), 0,GLES20.GL_RGB, GLES20.GL_UNSIGNED_BYTE, byteBuffer );|
GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, 0 );

ただし、glTexImage2Dはテクスチャに変更を加えず、エラーを返しません。しかし、このコードは私のiOSプロジェクトでは正しく機能しますが、Androidの場合は機能しません。同じテクスチャでglTexImage2D(..)を2回使用できないようです。つまり、テクスチャを変更する唯一の方法は、新しいテクスチャを作成して古いテクスチャを削除することですが、iOSで正しく機能するのはなぜですか。私のコードの何が問題になっていますか?

4

2 に答える 2

6

すみません、それは私のせいでした。(GLスレッドからではなく)他のスレッドからglTexImage2D関数を呼び出そうとしました。これで、すべてが完璧に機能します。

于 2012-07-23T10:13:08.400 に答える
3

glTexImage2D()はテクスチャを定義するために使用され、glTexSubImage2D()はテクスチャを再定義/更新するために使用されると思います。

テクスチャを更新するには、glTexSubImage2D()に切り替える必要がある場合があります。

于 2012-07-23T06:29:33.790 に答える