2012-03-05 97 views
1

這是我的第一個問題。 我是新開發的Android開發人員,現在我開發了一個動態壁紙(LiveSpace) 我已經上傳了精簡版,你可以在這裏找到它。 https://market.android.com/details?id=thedavincode.alienland&feature=search_result#?t=W251bGwsMSwyLDEsInRoZWRhdmluY29kZS5hbGllbmxhbmQiXQ ..Samsung Galaxy S2 OpenGl ES 2.0問題

我用Xperia手機和Lg P990測試了它,它似乎工作正常,但Galaxy S2有一個奇怪的問題。 (2.3.4。android) 我的應用程序有11個對象(類),每個對象都有紋理,每個對象都有自己的程序和着色器。星系不會呈現超過8個紋理。它從ID 0到7,然後休息對象apear黑色。不管我什麼都沒有嘗試過任何改變。 我讀過,有8個紋理的限制,但是每個着色器不是總數。 任何幫助將是有價值的..謝謝。

回答

1

SGS2(Mali400MP)具有最大值的限制。 8個紋理單元。如果您在着色器中僅使用單一紋理,則只能使用一個單元。例如:

  1. 當你正在做一些設置與着色器,那麼你的質地均勻綁定到第一個紋理單元(0),如:glUniform1i(uTexture, 0); - 這樣做對所有對象
  2. 渲染每個對象綁定紋理之前它屬於它:glBindTexture(GL_TEXTURE_2D , m_texture); - 您將紋理綁定到活動紋理單元。
  3. 由於在這種情況下,只使用一個紋理單元,可以省略glActiveTexture通話,因爲默認情況下第一紋理單元激活(GL_TEXTURE0

你應該始終保持在規格限制,如果可能的話,要兼容與大多數設備。

每個物體/紋理使用一個紋理單元不是一種方法。

+0

感謝您的回覆kibab。以及我想我做所有這些看到我的代碼。 – DavinCode 2012-03-05 18:54:02

+0

感謝您的回覆kibab。以及我想我做所有這些看到我的代碼。 這是每個對象類的繪圖 \t GLES20.glUseProgram(GroundProgram); // checkGlError(「glUseProgram」); int grtextureLoc = GLES20.glGetUniformLocation(GroundProgram,「sTexture」); GrTextureID = Commons.Mytextures [11]; \t GLES20.glActiveTexture(GLES20.GL_TEXTURE11); \t GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,GrTextureID); 並設置我的着色器和其他東西后,並繪製 GLES20.glUniform1i(grtextureLoc,GrTextureID); 我想念什麼? – DavinCode 2012-03-05 19:03:19

+0

您不會將紋理ID傳遞給制服。你傳遞紋理單元索引。在這裏閱讀:http://www.opengl.org/wiki/GLSL_Sampler#Binding_textures_to_samplers你真的需要在着色器中同時讀取12個紋理嗎? – 2012-03-05 19:45:35