2016-08-13 91 views
0

我想將紋理傳遞給我的着色器,但是當設置爲我的紋理的sampler2D制服具有與持有OpenGL提供的當前紋理的u_sampler2D相同的內容時。LibGDX將紋理傳遞給着色器的問題

這裏是我設置統一(這是我的SpriteBatch的呼喚super.begin()之前開始方法):

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(); 

這是我的測試着色器:

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; 
} 

在哪裏問題? 〜BeefEX

+0

你從未在SpriteBatch中設置着色器。但如果你這樣做,那麼你會在紋理單元上發生碰撞,所以最好使用例如紋理單元1.但是,這只是猜測,沒有看到實際的代碼,這是不可能的。 – Xoppa

+0

是的,我正在設置着色器,在主類的啓動方法。而對於紋理編號,我嘗試了許多數字,從OpenGL封裝中隱藏常量。 – BeefEX

+0

你沒有說出了什麼問題。黑色紋理?你確定着色器編譯?如果ShaderProgram.pedantic爲true,則由於未使用的制服,現在的着色器可能無法編譯。 – Tenfour04

回答

0

看看你在super.begin()中調用的源代碼。它將精靈的紋理綁定到與剛綁定其他紋理相同的單元,覆蓋它。將您的自定義紋理綁定到第一個單元,然後在調用super之前將GL活動紋理單元更改回0。

+0

好吧,這段代碼來自LibGDX wiki,但我會嘗試一下。 – BeefEX