2015-01-15 59 views
2

着色器編譯成功,但程序一旦渲染就開始崩潰......這是我得到的錯誤:」沒有統一名稱'u_texture'在着色器中「。這是我的着色器的樣子:LibGdx着色器(「在着色器中沒有統一的名稱'u_texture'))

#ifdef GL_ES 
precision mediump float; 
#endif 

uniform float time; 
uniform vec2 mouse; 
uniform vec2 resolution; 
varying vec2 surfacePosition; 


#define MAX_ITER 10 
void main(void) { 

    vec2 p = surfacePosition*4.0; 
    vec2 i = p; 
    float c = 0.0; 
    float inten = 1.0; 

    for (int n = 0; n < MAX_ITER; n++) { 
     float t = time * (1.0 - (1.0/float(n+1))); 
     i = p + vec2(
      cos(t - i.x) + sin(t + i.y), 
      sin(t - i.y) + cos(t + i.x) 
     ); 
     c += 1.0/length(vec2(
      p.x/(sin(i.x+t)/inten), 
      p.y/(cos(i.y+t)/inten) 
      ) 
     ); 
    } 
    c /= float(MAX_ITER); 

    gl_FragColor = vec4(vec3(pow(c,1.5))*vec3(0.99, 0.97, 1.8), 1.0); 
} 

有人可以幫助我。我不知道我做錯了什麼。順便說一句,這是我在網上找到的着色器,所以我知道它正在工作,唯一的問題是使它與libgdx一起工作。

+0

這個錯誤是不是很明顯? Libgdx使用統一變量'u_texture'作爲東西,你的着色器必須擁有它。 – HolyBlackCat 2015-01-15 16:15:37

+0

我想盡可能多,但即使添加它後,錯誤仍然相同 – user1176999 2015-01-15 16:16:49

+0

你確定錯誤是一樣的嗎?你究竟如何添加這個變量? – HolyBlackCat 2015-01-15 16:19:28

回答

5

libGDX的SpriteBatch假定着色器的'u_texture'是統一的。在將着色器程序放入SpriteBatch之前,只需添加 shaderProgram.pedantic = false;(Javadoc)即可。

更新:raveesh是正確的着色編譯器消失未使用的制服和屬性,但libGDX包裝OpenGL着色器自定義ShaderProgram。

2

您不僅應該在着色器程序中添加統一的u_texture,還應該使用它,否則它將被着色器編譯器優化掉。 但是看着你的着色器,你似乎無論如何都不需要制服,所以請檢查你的程序,找到類似shader.setUniformi("u_texture", 0);的東西並刪除該行。它應該工作得很好。