Универсальная переменная GLSL не обновляется - PullRequest
3 голосов
/ 11 февраля 2020

Итак, я пытаюсь заставить Цвет или мой Треугольник изменить цвет с градиента на solid! Я не совсем уверен, что не так, я объявил равномерную переменную для GraphChange таким же образом, как я сделал размер, и размер работает нормально и увеличивает размер треугольника, но я пытаюсь изменить смысл градиента в коде java, значение меняется, но цвет треугольника не меняется. Также вопрос о форматировании кода 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;}
    }

1 Ответ

4 голосов
/ 11 февраля 2020

Тип gradientChange равен int, поэтому вы должны использовать glProgramUniform1i вместо glProgramUniform1f для установки значения переменной:
(см. glProgramUniform)

gl.glProgramUniform1f(renderingProgram, gradientloc, gradientChange);

gl.glProgramUniform1i(renderingProgram,  gradientloc, gradientChange);
...