2016-08-13 9 views
0

シェーダにテクスチャを渡そうとしていますが、sampler2Dのユニフォームをテクスチャに設定するときに、OpenGLによって提供される現在のテクスチャを保持するu_sampler2Dと同じコンテンツがあります。LibGDXテクスチャをシェーダに渡す際の問題

precision mediump float; 

varying vec4 v_color; 
varying vec2 v_texCoord0; 

uniform vec4 gl_FragCoord; 
uniform sampler2D u_sampler2D; 
uniform sampler2D u_LightMap; 
uniform vec3 u_cam; 
uniform vec2 resolution; 
void main() { 
    vec4 lightColor = texture2D(u_LightMap, gl_FragCoord); 
    gl_FragColor = lightColor; 
} 

は次のとおりです。

texture.bind(); 
this.getShader().begin(); 
this.getShader().setUniformi("u_LightMap",0); 
this.getShader().setUniformf("u_camOffset", new Vector3(inputMethod.getCameraOffsetX(), inputMethod.getCameraOffsetY(), inputMethod.getZoom())); 
this.getShader().end(); 

これは私のテストシェーダである:ここで

は、私が制服セット(これは私のSpriteBatch年代にあるのにsuper.begin()を呼び出す前にメソッドを開始)する方法であります問題? 〜BeefEX

+0

SpriteBatchにシェーダを設定することはありません。しかし、もしあなたがそうするなら、あなたはテクスチャユニットに衝突するでしょう。しかし、これはちょうど推測ですが、実際のコードを見ることなく、確かに言うことは不可能です。 – Xoppa

+0

はいメインクラスのstartメソッドでシェーダを設定しています。そして、テクスチャ番号については、OpenGLラッパーの定数を含む多くの数字を試しました。 – BeefEX

+0

あなたは何がうまくいかなかったと言っていませんでした。黒いテクスチャ?シェイダーがコンパイルされていますか? ShaderProgram.pedanticがtrueの場合、使用されていない制服のためシェーダがコンパイルに失敗することがあります。 – Tenfour04

答えて

0

あなたがsuper.begin()で呼び出しているソースコードを見てください。それはスプライトのテクスチャを、他のテクスチャとバインドした同じユニットにバインドして、上書きします。カスタムテクスチャをユニット1にバインドしてから、superを呼び出す前にGLアクティブテクスチャユニットを0に戻してください。

+0

このコードはLibGDX wikiのものですが、試してみます。 – BeefEX

関連する問題