Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 着色器中没有名称为的统一_Opengl_Libgdx_Shader - Fatal编程技术网

Opengl 着色器中没有名称为的统一

Opengl 着色器中没有名称为的统一,opengl,libgdx,shader,Opengl,Libgdx,Shader,我对所有这些着色器都是新手,我只是想替换LibGDX中的默认SpriteBatch渲染器 我复制粘贴了默认着色器并尝试添加鼠标一致性,但它在着色器中为我提供了名为“u_mouse”的“无一致性” 以下是所有相关代码: String vertexShader = "attribute vec4 " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" // + "attribute vec4 " + ShaderProgram.C

我对所有这些着色器都是新手,我只是想替换LibGDX中的默认SpriteBatch渲染器

我复制粘贴了默认着色器并尝试添加鼠标一致性,但它在着色器中为我提供了名为“u_mouse”的“无一致性”

以下是所有相关代码:

     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(