2011-12-27 68 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(); 

,並在這些地方我的三角形繪製的部分:

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); 

在YM設備一切工作相當完美:釷ere是4個四邊形,每個都有自己的紋理單元。

但後來我給了我的一個朋友和他的設備(三星Galaxy S1)的apk,它只加載一個紋理,並只顯示其中的第一個兩個... 不知道在哪裏尋找....直到現在我還沒發現bug。

PS:另一個錯誤發生,我不知道處理。在「重新打開」(從sleepmode進入)之後,當前正在運行的應用程序中所有應該使用alpha混合的圖像都是黑色的......可能是什麼問題?

回答

4

這與我在幾個小時前工作的另一個案例非常相似。

在OpenGL ES 2.0中,如果沒有2個紋理的功率,換行模式只能是GL_CLAMP_TO_EDGE。

這意味着,如果您使用不同於GL_CLAMP_TO_EDGE的換行模式,它期望具有2紋理的冪。 (例如,512X256,1024X1024等)。

這條規則的解釋是相當開放的,它取決於設備的變化很大,例如在我的Motorola Defy上有效,在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);以及GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_CLAMP_TO_EDGE。

我希望它會做到這一點。

莫里吉奧貝尼戴提

0

對不起,讓你先等着:/

我縮放每個紋理高達POW2大小的紋理,通過查找在新POW2紋理是大到足以包含原始位圖。 當我改變TextureParameterf到GL_CLAMP ......它看起來像這樣: it seems that one part of the texture-coordinates is not passed right

似乎紋理座標的一個部分是不對通過

我希望你知道爲什麼這個看起來有點現在很奇怪。

編輯:最後我發現我的失敗是什麼。 V座標計算不正確。現在,因爲所有的v座標都是正數,所以它工作正常,謝謝:)