Opengl 着色器中没有名称为的统一
我对所有这些着色器都是新手,我只是想替换LibGDX中的默认SpriteBatch渲染器 我复制粘贴了默认着色器并尝试添加鼠标一致性,但它在着色器中为我提供了名为“u_mouse”的“无一致性” 以下是所有相关代码:Opengl 着色器中没有名称为的统一,opengl,libgdx,shader,Opengl,Libgdx,Shader,我对所有这些着色器都是新手,我只是想替换LibGDX中的默认SpriteBatch渲染器 我复制粘贴了默认着色器并尝试添加鼠标一致性,但它在着色器中为我提供了名为“u_mouse”的“无一致性” 以下是所有相关代码: String vertexShader = "attribute vec4 " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" // + "attribute vec4 " + ShaderProgram.C
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" //
+ "uniform vec2 u_mouse;\n" //
+ "varying vec4 v_color;\n" //
+ "varying vec2 v_texCoords;\n" //
+ "\n" //
+ "void main()\n" //
+ "{\n" //
+ " v_color = u_mouse * " + ShaderProgram.COLOR_ATTRIBUTE + ";\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 LOWP vec4 v_color;\n" //
+ "varying vec2 v_texCoords;\n" //
+ "uniform sampler2D u_texture;\n" //
+ "uniform vec2 u_mouse;\n" //
+ "void main()\n"//
+ "{\n" //
+ " gl_FragColor = v_color * texture2D(u_texture, u_mouse);\n" //
+ "}";
ShaderProgram shaderTest = new ShaderProgram(vertexShader, fragmentShader);
shaderTest.setUniformf("u_mouse", Gdx.input.getX(), Gdx.input.getY());
这是堆栈跟踪:
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.IllegalArgumentException: no uniform with name 'u_mouse' in shader
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:113)
Caused by: java.lang.IllegalArgumentException: no uniform with name 'u_mouse' in shader
at com.badlogic.gdx.graphics.glutils.ShaderProgram.fetchUniformLocation(ShaderProgram.java:283)
at com.badlogic.gdx.graphics.glutils.ShaderProgram.setUniformf(ShaderProgram.java:394)
at com.nehatchick.games.wf.WhiteMountains.render(WhiteMountains.java:424)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:187)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:110)
不确定,但可能
u_mouse
需要一个Vector2
变量。试试这个-
shaderTest.setUniformf("u_mouse", new Vector2(Gdx.input.getX(), Gdx.input.getY()));
不确定,但可能
u_mouse
需要一个Vector2
变量。试试这个-
shaderTest.setUniformf("u_mouse", new Vector2(Gdx.input.getX(), Gdx.input.getY()));
不确定,但可能
u_mouse
需要一个Vector2
变量。试试这个-
shaderTest.setUniformf("u_mouse", new Vector2(Gdx.input.getX(), Gdx.input.getY()));
不确定,但可能
u_mouse
需要一个Vector2
变量。试试这个-
shaderTest.setUniformf("u_mouse", new Vector2(Gdx.input.getX(), Gdx.input.getY()));
这归结为这样一个事实:在确定顶点着色器的输出和片段着色器的输入后,链接器意识到
u_鼠标
不会在任何活动代码中使用
换句话说,虽然着色器中使用了u_鼠标
来计算v_颜色
,v_颜色
在顶点和片段阶段之间没有正确链接。顶点着色器中的精度与片段着色器中的精度不匹配,因此就GLSL而言,不使用顶点着色器中的v_color
输出
由于u_鼠标
不会影响链接的程序,因此没有为其分配统一的编号。更重要的是,这种情况至少应该产生链接器警告。链接之后,我会检查glGetProgramInfoLog(…)
的输出
通过在顶点着色器中声明
v_color
LOWP,或者删除片段着色器中的LOWP声明,可以更正我刚才讨论的所有内容。您只需要顶点着色器的输出和片段着色器的输入就可以有匹配的变量声明。这归结为一个事实,即在确定顶点着色器的输出和片段着色器的输入之后,链接器意识到,u_鼠标
不用于任何活动的代码
换句话说,虽然着色器中使用了u_鼠标
来计算v_颜色
,v_颜色
在顶点和片段阶段之间没有正确链接。顶点着色器中的精度与片段着色器中的精度不匹配,因此就GLSL而言,不使用顶点着色器中的v_color
输出
由于u_鼠标
不会影响链接的程序,因此没有为其分配统一的编号。更重要的是,这种情况至少应该产生链接器警告。链接之后,我会检查glGetProgramInfoLog(…)
的输出
通过在顶点着色器中声明
v_color
LOWP,或者删除片段着色器中的LOWP声明,可以更正我刚才讨论的所有内容。您只需要顶点着色器的输出和片段着色器的输入就可以有匹配的变量声明。这归结为一个事实,即在确定顶点着色器的输出和片段着色器的输入之后,链接器意识到,u_鼠标
不用于任何活动的代码
换句话说,虽然着色器中使用了u_鼠标
来计算v_颜色
,v_颜色
在顶点和片段阶段之间没有正确链接。顶点着色器中的精度与片段着色器中的精度不匹配,因此就GLSL而言,不使用顶点着色器中的v_color
输出
由于u_鼠标
不会影响链接的程序,因此没有为其分配统一的编号。更重要的是,这种情况至少应该产生链接器警告。链接之后,我会检查glGetProgramInfoLog(…)
的输出
通过在顶点着色器中声明
v_color
LOWP,或者删除片段着色器中的LOWP声明,可以更正我刚才讨论的所有内容。您只需要顶点着色器的输出和片段着色器的输入就可以有匹配的变量声明。这归结为一个事实,即在确定顶点着色器的输出和片段着色器的输入之后,链接器意识到,u_鼠标
不用于任何活动的代码
换句话说,虽然着色器中使用了u_鼠标
来计算v_颜色
,v_颜色
在顶点和片段阶段之间没有正确链接。顶点着色器中的精度与片段着色器中的精度不匹配,因此就GLSL而言,不使用顶点着色器中的v_color
输出
由于u_鼠标
不会影响链接的程序,因此没有为其分配统一的编号。更重要的是,这种情况至少应该产生链接器警告。链接之后,我会检查glGetProgramInfoLog(…)
的输出
通过在顶点着色器中声明
v_color
LOWP,或者删除片段着色器中的LOWP声明,可以更正我刚才讨论的所有内容。您只需要顶点着色器的输出和片段着色器的输入就可以拥有匹配的变量声明。尝试在批处理开始和结束之间调用它
批处理设置阴影(shaderTest);
batch.begin();
setUniformf(“u_鼠标”,Gdx.input.getX(),Gdx.input.getY());
批次图。。。。。。。。。。。。。。。
batch.end()代码>尝试在批处理开始和结束之间调用它
批处理设置阴影(shaderTest);
batch.begin();
shaderTest.setUniformf(“u_鼠标”,Gdx.input.getX(),Gdx.input.getY(