LibGDX FrameworkのSpriteBatchクラスをうれしく使っています。 私の目的は、シェーダーを通してスプライトの表現を変更することです。LibGDX SpriteBatchマルチテクスチャ可能ですか?
batch = new SpriteBatch(2, shaderProgram);
私はSpriteBatchクラスからデフォルトのシェーダをコピーして別の 均一なサンプラー2D
+ "uniform sampler2D u_Texture2;\n"//
を追加しましたが、シェーダにテクスチャを与える作業方法はあります。 このようにすると、allwaysはClearColor Screenで終了します。
batch.begin();
texture2.bind(1);
shaderProgram.setUniformi("u_Texture2", 1);
batch.draw(spriteTexture,positions[0].x,positions[0].y);
batch.draw(spriteTexture,positions[1].x,positions[1].y);
batch.end();
各テクスチャだけで動作しています。メッシュクラスの助けを借りて手動で描画すると、期待どおりに動作します。だから私はSpriteBatchの便利さを使うために何をすることができますか?私は、問題はテクスチャのバインディングに関連があると思いヘルプ
ちょっと最後に、私はanswere、感謝を得ました! あなたは正しいです。それはクラスがテクスチャをバインドする方法の原因です。私は自分のカスタムスプライトバッチクラスをすでに作っていると言いたい。 SpriteBatchは、より大きなサイズのFramebufferテクスチャをレンダリングする際にいくつかの問題も示しています。そして、私は常に前にTEXTURE0をバインドします。それで私は自分のやり方でやることに決めました。それほど納得がいくことはできませんが、より柔軟な方法です今私は頂点の世代だけを扱うスプライトバッチを持っています。すべてのarroundは、独自のシェーダでカスタマイズできます。 – fky
SpriteBatchは頂点を生成する以外にも少しパフォーマンスが向上します。 SpriteBatch自体にはいくつかの「使い勝手」の問題がありますが、設計上の決定です。最も一般的な描画操作を簡素化することを意図しており、何らかの形で柔軟性が損なわれています。とにかく、私はこれまでに遭遇した問題のほとんどを解決することができました(ほとんどの場合、それを使用する前に適切なOpenGLフラグを有効/無効にしています)。おそらく今夜はあなたと同じようにマルチテクスチャを実装しようとしています;) –
もう一度遅れて、あなたのサポートに感謝しています。編集したように機能しています。しかし、私はそれが好きではありません。これは親切に私にとっては危険に見えます。私は、私の専門化されたバージョンも好んでいます。これは、より小さなサイズのより速く、より良いデバッグ可能な原因です。 SpriteBatchは皆を幸せにしようとしています。私の意見では、パフォーマンス最適化クラスではありません。しかし、とにかくSpriteBatchがTEXTURE0だけでなくLAST BOUNDテクスチャを使用していることを明確にしてくれてありがとう – fky