2011-12-27 4 views
0

私は今、複数のテクスチャの可能性を実装していましたが、昨日、他のデバイスで期待通りに動作しないことがわかりました。私のものではありません。/ 私のデバイス(Experia Mini Pro)それは完璧に動作します:複数のテクスチャは別のデバイスでは機能しませんか?

int[] textureID = new int[1];   
GLES20.glDeleteTextures(1,textureID,0); 
GLES20.glGenTextures(1,textureID,0); 
this.unit = textureID[0]; 
GLES20.glActiveTexture(GLES20.GL_TEXTURE0+this.unit); 
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,this.unit);  
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_MIN_FILTER,GLES20.GL_LINEAR); 
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_MAG_FILTER,GLES20.GL_LINEAR); 
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_WRAP_S,GLES20.GL_REPEAT); 
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_REPEAT); 

... 
... bitmap loading functions 
... 

GLUtils.texImage2D(GLES20.GL_TEXTURE_2D,0,bitmapTexture,0);  
bitmapTexture.recycle(); 

、ここで私の三角形が描かれている部分:テクスチャロードするための

まずいくつかのコード・スニペットYMデバイスすべてで

GLES20.glUniform1i(LLShader.location[20],gfx.imagetexture.unit); 
GLES20.glActiveTexture(GLES20.GL_TEXTURE0+gfx.imagetexture.unit); 
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,gfx.imagetexture.unit); 
GLES20.glDrawArrays(GLES20.GL_TRIANGLES,0,gfx._vertexBuffer.capacity()/3); 

はかなり完璧に動作します: Th 4つのクワッドがあり、それぞれに独自のテクスチャーユニットが順番に描かれています。

しかし、私は私の友人と彼のデバイス(サムスンギャラクシーS1)にAPKを与えました、それは1つのテクスチャを読み込んで、そのうちの最初の2つだけを表示するだけです... わからない探すには....私はまだバグを見つけられませんでした。

PS:別のバグが発生しました。私はそれを処理することができません。 "スリープモード"から "再オープン"した後、現在実行中のアプリケーションは、アルファブレンディングを使用すべきすべての画像が黒色になります。

答えて

4

これはほんの数時間前に作業した別のケースと非常によく似ています。

OpenGL ES 2.0では、2テクスチャのパワーがない場合、ラップモードはGL_CLAMP_TO_EDGEにしかなりません。

これは、GL_CLAMP_TO_EDGEとは異なるラップモードを使用すると、2テクスチャの威力を持つことを前提としています。 (たとえば、512X256,1024X1024など)。

このルールの解釈はかなり開いています。デバイスによっては、モトローラの動作に違いがありますが、Galaxy TABではこれが動作していると考えられます。

はこれを試してみてください:

20.glTexParameteri(GLES20.GL_TEXTURE_2D、GLES20.GL_TEXTURE_WRAP_S、GLES20.GL_CLAMP_TO_EDGE)。 GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D、GLES20.GL_TEXTURE_WRAP_T、GLES20.GL_CLAMP_TO_EDGE);

私はそれが魔法をやることを願っています。

マウリツィオ・ベネデッティ

あなたが最初に待ってみましょうのため申し訳ありません
0

:/

私は新しいPOW2テクスチャは、元のビットマップを格納するのに十分な大きさであるとき、検索することで、POW2サイズのテクスチャに各テクスチャをスケールアップ。 私は... GL_CLAMPするTextureParameterfを変更すると、それは次のようになります。 it seems that one part of the texture-coordinates is not passed right

私はこれが少し見える理由を知っている願っていますテクスチャ座標の一部が右

が渡されていないようです奇妙な今。

EDIT:最後に私の失敗は何かを知りました。 V座標が正しく計算されませんでした。今、すべてのv座標が正であるので、それはうまく動作します、ありがとう:)