2014-09-11 89 views
1

我剛從誰說,我(的Android的OpenGL ES 2.0)的應用程序(遊戲)將不會對他的HTC 1X +手機上運行用戶聽到。他所得到的只是屏幕頂部的音樂和橫幅廣告,沒有別的。常見原因正在呈現

不幸的是我沒有一個HTC 1X +測試此上。

一些注意事項:

  • 雖然我的紋理不是2的冪,我只使用GLES20.GL_CLAMP_TO_EDGE
  • 從我讀過,宏達1X +擁有2048 x 2048一個最大紋理尺寸並且它從XHDPI文件夾中獲取資源(令人討厭),即使如此,我只有1 texure超出了這個尺寸,我的應用程序的開始頁面上顯示的所有其他對象使用的紋理比這個最大量要小得多,所以應該顯示一些東西。
  • 我沒有使用任何類型的

我的應用程序運行相當愉快的15(近似)的設備我的紋理壓縮,和其他人已經測試了 - 只是1倍(到目前爲止)是給問題。

任何人都可以指出一些常見問題與OpenGL ES 2.0可能導致這些紋理不被渲染?是否有某些Android版本或設備有怪癖?

我還沒有發佈,只是因爲該應用程式適用於大多數設備的任何代碼,我不知道這部分代碼將是有益的,但如果需要進行任何代碼,請只問。

編輯 - 包括紋理加載代碼

public static int LoadTexture(GLSurfaceView view, Bitmap imgTex){ 

    //Array for texture 
    int textures[] = new int[1]; 
    try { 
     //texture name 
     GLES20.glGenTextures(1, textures, 0); 
     //Bind textures 
     GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]); 
     //Set parameters for texture 
     GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); 
     GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); 

     //Apply texture 
     GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, imgTex, 0); 

     //clamp texture 
     GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_CLAMP_TO_EDGE); 

    } catch (Exception e){ 

    } 
    //Increase texture count 
    textureCount++; 
    //Return texture 
    return textures[0]; 
} 
+0

而你有'GL_TEXTURE_MIN_FILTER'設置爲'GL_LINEAR'或'GL_NEAREST'紋理沒有mipmaps? – 2014-09-11 03:42:49

+0

嗨@RetoKoradi,我有我的代碼如下:GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_MAG_FILTER,GLES20.GL_LINEAR); – Zippy 2014-09-11 12:49:46

+0

我已經添加了我使用的應用紋理@RetoKoradi代碼,希望它會幫助你發現和存在的問題 - 感謝 – Zippy 2014-09-11 13:15:58

回答

0
  • 你檢查過採樣特性? 設置看起來正確,但爲何不指定GL_TEXTURE_WRAP_S設置?用整數值使用GLES20.glTexParameteri。

  • 您正在使用什麼類型的位圖的
  • ? 嘗試強制內部格式爲GL_RGBA,GL_BGR,GL_RGB

  • 您是否正確解除綁定或綁定到不同的紋理? 其他紋理設置可能會導致代碼的其他部分造成嚴重破壞。

  • 您是否在着色器中指定了正確的紋理單元? 打印着色器的採樣器屬性位置,以便您知道這是正確的,並確保在渲染過程中將紋理綁定到它。

+0

感謝@StarShine,有趣的是,我只是想加入GL_TEXTURE_WRAP_S設置但後來我的一些紋理顯示OK,一些顯示器如黑色,有些根本不顯示(或「完全透明」)。 – Zippy 2014-09-11 13:54:02

+0

關於其他問題,如果其中任何一個都是錯誤的,那麼可以預計這些設備將在90%的設備上運行,但會破壞兩個特定的設備嗎?另外,您是否可以確認**所有** openGL ES 2.0設備都支持NPOT紋理(使用clamp_to_edge和非mipmap時)?因爲我的紋理是NPOT,但我使用的是應該支持的模式,因此我想將其排除爲問題...... – Zippy 2014-09-11 13:59:28

+0

我們在某個時間點出現了紋理問題,這是由於採樣器屬性沒有設置,除了錯誤的指針等常見的錯誤。我們也有渲染錯誤莫名其妙地造成了一個未初始化的價值。 (我們使用的是NDK。)再次檢查glTexParameterf,它可能必須是java中的glTexParameteri。關於統治事情:不要忘記,不同的平臺運行不同的驅動程序實現。將是一個很好的案例來測試所有這些並進行比較。 – StarShine 2014-09-11 14:01:46