java - GLSL 统一变量未更新

标签 java opengl glsl shader

所以我试图让颜色或我的三角形从渐变变为纯色!我不太确定出了什么问题,我以与 size 相同的方式声明了gradientChange的统一变量,并且 size 工作正常并增加了三角形的大小,但是我尝试更改java代码中的gradientChange,值发生了变化,但三角形上的颜色没有改变。 还有一个关于 GLSL 代码格式的问题,在我在网上看到的所有示例中,他们都可以将每个声明放在单独的行中,但是当我尝试这样做时,它会破坏代码吗?


    public void display(GLAutoDrawable drawable) {
        GL4 gl = (GL4) GLContext.getCurrentGL();
        gl.glClear(GL_DEPTH_BUFFER_BIT);
        gl.glClear(GL_COLOR_BUFFER_BIT);
        gl.glUseProgram(renderingProgram);

        x+=inc;
        if(x>1.0f)inc = -0.01f;
        if(x<-1.0f)inc = 0.01f;
        int offsetLoc = gl.glGetUniformLocation(renderingProgram, "offset");
        gl.glProgramUniform1f(renderingProgram,  offsetLoc, x);

        int gradientloc = gl.glGetUniformLocation(renderingProgram, "gradientChange");
        gl.glProgramUniform1f(renderingProgram,  gradientloc, gradientChange);

        int sizeloc = gl.glGetUniformLocation(renderingProgram, "size");
        gl.glProgramUniform1f(renderingProgram,  sizeloc, size);

        gl.glDrawArrays(GL_TRIANGLES, 0, 3);



    }


这是我的 vertShader.glsl

#version 430
out vec4 varyingColor; uniform float offset; uniform int gradientChange; vec4 colorChange; uniform float size;
void main(void)
{   if (gl_VertexID == 0){ gl_Position = vec4(size * (0.25+offset), size * (-0.25), 0.0, 1.0); 
    colorChange = vec4( 1.0,0.0,0.0,1.0);}
    if (gl_VertexID == 1){ gl_Position = vec4(size * (-0.25+offset), size * (-0.25), 0.0, 1.0); 
        colorChange = vec4( 0.0,1.0,0.0,1.0);}
    if (gl_VertexID == 2){ gl_Position = vec4(size * (0.0+offset), size * (0.25), 0.0, 1.0);    
        colorChange = vec4( 0.0,0.0,1.0,1.0);}
    if(gradientChange == 1){varyingColor = vec4( 1.0,0.0,0.0,1.0);}else{varyingColor = colorChange;}
    }

最佳答案

gradientChange的类型是int,所以你必须使用glProgramUniform1i而不是glProgramUniform1f来设置变量的值:
(参见glProgramUniform)

gl.glProgramUniform1f(renderingProgram,gradientloc,gradientChange);

gl.glProgramUniform1i(renderingProgram,  gradientloc, gradientChange);

关于java - GLSL 统一变量未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60165110/

相关文章:

c - 我如何链接 GLFW

opengl - 计算着色器不修改 3d 纹理

geometry - GLSL立方体有符号距离场实现解释?

Java,子类返回泛型的泛型

java - Vagrant、Chef-solo 和 Java Recipe : Error executing action `install` on resource 'java_ark[jdk]'

java - 将 Json 日期转换为 java 日期

c++ - 如何在 opengl 和 c++ 中围绕 "camera"旋转

java File.separator 在 Windows 上的文件路径中变为 "%"

c++ - opengl画线出错?

ios - Toon.shader 找不到 _light 变量