【问题标题】:Fragment Shader doesn't seem to output any colors片段着色器似乎没有输出任何颜色
【发布时间】:2020-10-19 14:06:45
【问题描述】:

我最近决定开始学习 OpenGL,并给自己买了一本关于 OpenGL Core 3.3 的书。这本书通常是关于 C++ 的。

所以,在找了一会儿之后,我发现了一个我更擅长的语言的库,它提供了几乎相同的功能:lwjgl。 我设法用基本的顶点和片段着色器绘制了几个形状。当我尝试让片段着色器输出白色以外的颜色时,它没有影响任何东西。形状仍然呈现为白色。

我的问题是着色器本身是否有问题,或者我没有正确加载它。 我的 Main.java 中的代码(ShaderLoader 只是一个加载 .vs(顶点着色器)和 .fs(片段着色器)文件的类):

 try {
            String vshaderSource, fshaderSource;
            vshaderSource = ShaderLoader.loadShaderSource(vertexShader, Path.of("main.vs"));
            glShaderSource(vertexShader, vshaderSource);
            fshaderSource = ShaderLoader.loadShaderSource(fragmentShader, Path.of("main.fs"));
            
            glShaderSource(fragmentShader, fshaderSource);
        } catch (IOException e) {
            log.severe(String.format("Loading of Shaders failed due to IOException: %s", e.getMessage()));
            return;
        } 
        glCompileShader(vertexShader);
        int success = glGetShaderi(vertexShader, GL_COMPILE_STATUS);
        String infoLog;
        if(success == 0) {
            infoLog = glGetShaderInfoLog(vertexShader);
            log.severe("Shader Compilation failed: " + infoLog);
        }
        glCompileShader(fragmentShader);
        success = glGetShaderi(fragmentShader, GL_COMPILE_STATUS);
        if(success == 0) {
            infoLog = glGetShaderInfoLog(fragmentShader);
            log.severe("Shader Compilation failed:" + infoLog);
        }
        int shaderProgram = glCreateProgram();
        glAttachShader(shaderProgram, vertexShader);
        glAttachShader(shaderProgram, fragmentShader);
        glDeleteShader(vertexShader);
        glDeleteShader(fragmentShader);
        glUseProgram(shaderProgram);
        //In the rendering Loop
        glUseProgram(shaderProgram);
                
        glBindVertexArray(VAO); 

        glUseProgram(shaderProgram);

        glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

顶点着色器 main.vs:

#version 330 core
layout (location = 0) in vec3 aPos;

out vec4 vertexColor;

void main()
{
    gl_Position = vec4(aPos, 1.0);
    vertexColor = vec4(0.5, 0.0, 0.0, 1);
}

片段着色器 main.fs:

#version 330 core
   in vec4 vertexColor;
   out vec4 FragColor;
   void main()
    {
       FragColor = vertexColor;
    };

【问题讨论】:

    标签: java opengl shader lwjgl


    【解决方案1】:

    你不是 glLinkProgram 着色器程序。因此,在将着色器附加到程序并再次分离它们之间,您应该添加glLinkProgram(shaderProgram)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-25
      • 2012-02-10
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多