我想要一個統一的變種添加到我的着色器,這是我的着色器:libGDX:添加均勻VAR
String vertexShader = "attribute vec4 " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
+ "attribute vec4 " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" //
+ "attribute vec2 " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
+ "uniform mat4 u_projTrans;\n" //
+ "varying vec4 v_color;\n" //
+ "varying vec2 v_texCoords;\n" //
+ "\n" //
+ "void main()\n" //
+ "{\n" //
+ " v_texCoords = " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
+ " gl_Position = u_projTrans * " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
+ "}\n";
String fragmentShader = "#ifdef GL_ES\n" //
+ "#define LOWP lowp\n" //
+ "precision mediump float;\n" //
+ "#else\n" //
+ "#define LOWP \n" //
+ "#endif\n" //
+ "varying vec2 v_texCoords;\n" //
+ "uniform sampler2D u_texture;\n" //
+ "uniform sampler2D u_texturePalette;\n" //
+ "void main()\n"//
+ "{\n" //
+ " vec4 textureColor = texture2D(u_texture, v_texCoords).rgba;\n"
+ " vec4 paletteColor = texture2D(u_texturePalette, vec2(textureColor.b,0)).rgba;\n"
+ " gl_FragColor = paletteColor;\n" //
+ "}";
問題帶有
均勻sampler2D u_texturePalette;
ShaderProgram無法識別着色器中的新制服。此外,我已經做到了這一點:
shader = new ShaderProgram(vertexShader, fragmentShader);
shader.setUniformi("u_texturePalette", 0);
Texture text = new Texture(Gdx.files.internal("./data/palette.png"));
text.bind(shader.getUniformLocation("u_texturePalette"));
batch = new SpriteBatch();
batch.setShader(shader);
當我打電話功能shader.hasUniform("u_texturePalette")
,它解析爲真,但是當我去看看shader.getUniformLocation("u_texturePalette")
它解析爲-1
這是一個錯誤? 。任何想法我做得不好?
你肯定着色器編譯和鏈接成功? – Tim 2012-07-21 16:49:32
@Tim着色器編譯得很好,但我怎麼能看到它的鏈接好嗎? – 2012-07-21 18:37:32
我對libGDX並不熟悉,但對於OpenGL來說,它就像'glGetProgramiv(program,GL_LINK_STATUS,retVal)'。查看libGDX支持哪種錯誤檢查。 – Tim 2012-07-21 18:59:28