2012-03-05 6 views
1

これは私の最初の質問です。 私はAndroid開発を初めて、ライブ壁紙(LiveSpace)を作成しました 私はすでにLiteバージョンをアップロードしています。ここで見つけることができます。 https://market.android.com/details?id=thedavincode.alienland&feature=search_result#?t=W251bGwsMSwyLDEsInRoZWRhdmluY29kZS5hbGllbmxhbmQiXQ ..サムスンギャラクシーS2 OpenGl ES 2.0の問題

私は、のXperia携帯電話とLG P990でそれをテストし、それが正常に動作するようだが、ギャラクシーS2との奇妙な問題があります。 (2.3.4。アンドロイド) 私のアプリケーションには、オブジェクトごとにテクスチャを持つ11個のオブジェクト(クラス)があり、すべてのオブジェクトには独自のプログラムとシェーダがあります。銀河は8つ以上のテクスチャをレンダリングしません。 id 0から7になり、残りのオブジェクトは黒になります。私が何を変えようと試みても。 iveは、8つのテクスチャに制限がありますが、合計ではなくシェーダーごとに制限があることを読んでいます。 助けていただければ幸いです。ありがとうございます。

答えて

1

SGS2(Mali400MP)の最大値は最大です。 8つのテクスチャユニット。シェーダで単一のテクスチャを使用している場合は、1つのユニットしか使用できません。たとえば、次のように

  1. あなたは、シェーダといくつかのセットアップを行っている場合は、最初のテクスチャユニットにあなたのテクスチャ制服をバインドする(0)のような:glUniform1i(uTexture, 0); - 各オブジェクトのバインドテクスチャをレンダリングする前に、あなたのすべてのオブジェクト
  2. のためにそれを行いますそれに属する:glBindTexture(GL_TEXTURE_2D , m_texture); - アクティブなテクスチャユニットにテクスチャをバインドしています。
  3. この場合に使用される唯一のテクスチャユニットがあるので、可能な場合は常に互換性があるように、仕様限界に維持する必要がありますデフォルトの最初のテクスチャユニット起動し(GL_TEXTURE0

によるとあなたは、glActiveTextureコールを省略することができますほとんどのデバイスで使用できます。

オブジェクト/テクスチャごとに1つのテクスチャユニットを使用する方法はありません。

+0

返信いただきありがとうございます。まあ、私はこれらのすべてを私のコードを参照してくださいだと思います。 – DavinCode

+0

返信いただきありがとうございます。まあ、私はこれらのすべてを私のコードを参照してくださいだと思います。 これはすべてのオブジェクトクラスのonDrawです \t GLES20.glUseProgram(グラウンドプログラム); // checkGlError( "glUseProgram"); int grtextureLoc = GLES20.glGetUniformLocation(グラウンドプログラム、 "テクスチャ"); GrTextureID = Commons.Mytextures [11]; \t GLES20.glActiveTexture(GLES20.GL_TEXTURE11); \t GLES20.glバインドテクスチャ(GLES20.GL_TEXTURE_2D、GrTextureID); シェーダやその他のものを設定して描画する前に GLES20.glUniform1i(grtextureLoc、GrTextureID); 私は何かが恋しい? – DavinCode

+0

ユニフォームにテクスチャIDを渡すことはありません。テクスチャユニットのインデックスを渡します。ここをクリックしてください:http://www.opengl.org/wiki/GLSL_Sampler#Binding_textures_to_samplersシェイダーで12のテクスチャを同時に読む必要がありますか? –