Java OpenGL片段着色器编译问题

Java OpenGL片段着色器编译问题,java,opengl,glsl,lwjgl,fragment-shader,Java,Opengl,Glsl,Lwjgl,Fragment Shader,我正在学习使用LWJGL编写Java游戏引擎的教程。我在GLSL中编写了一个片段着色器,并将其命名为basicFragment.fs: #version 330 out vec4 fragColor; void main() { fragColor = vec4(0,0, 1.0, 1.0, 1.0); } 现在我按照教程编写了一种编译着色器的方法,在这里我得到了一个错误。首先,这是我的着色器类 package com.base.engine; import static org

我正在学习使用LWJGL编写Java游戏引擎的教程。我在GLSL中编写了一个片段着色器,并将其命名为basicFragment.fs:

#version 330

out vec4 fragColor;

void main()
{
    fragColor = vec4(0,0, 1.0, 1.0, 1.0);
}
现在我按照教程编写了一种编译着色器的方法,在这里我得到了一个错误。首先,这是我的着色器类

package com.base.engine;

import static org.lwjgl.opengl.GL20.*;
import static org.lwjgl.opengl.GL21.*;
import static org.lwjgl.opengl.GL32.*;

public class Shader 
{
    private int program;

    public Shader()
    {
        program = glCreateProgram();

        if(program == 0)
        {
            System.err.println("Shader creation failed: Could not find valid memory location in constructor");
            System.exit(1);
        }
    }

    public void bind()
    {
        glUseProgram(program);
    }

    public void addVertexShader(String text)
    {
        addProgram(text, GL_VERTEX_SHADER);
    }

    public void addGeometryShader(String text)
    {
        addProgram(text, GL_GEOMETRY_SHADER);
    }

    public void addFragmentShader(String text)
    {
        addProgram(text, GL_FRAGMENT_SHADER);
    }

    public void compileShader()
    {
        glLinkProgram(program);

        if(glGetProgrami(program, GL_LINK_STATUS) == 0)
        {
            System.err.println(glGetShaderInfoLog(program, 1024));
            System.exit(1);
        }

        glValidateProgram(program);

        if(glGetProgrami(program, GL_VALIDATE_STATUS) == 0)
        {
            System.err.println(glGetShaderInfoLog(program, 1024));
            System.exit(1);
        }
    }

    private void addProgram(String text, int type)
    {
        int shader = glCreateShader(type);

        if(shader == 0)
        {
            System.err.println("Shader creation failed: Could not find valid memory location when adding shader");
            System.exit(1);
        }

        glShaderSource(shader,text);
        glCompileShader(shader);

        if(glGetShaderi(shader, GL_COMPILE_STATUS) == 0)
        {
            System.err.println(glGetShaderInfoLog(shader, 1024));
            System.exit(1);
        }

        glAttachShader(program, shader);
    }
}
然后,在我的游戏课上,我做了以下几点。(希望代码是不言自明的。如果我不清楚任何地方,请告诉我):

基本上,当我调用函数时

shader.addFragmentShader(ResourceLoader.loadShader("basicFragment.fs"));
函数给出了以下错误:

3.3.0 - Build 8.15.10.2712
ERROR: 0:7: 'constructor' : too many arguments
当我只实现顶点着色器时,我没有得到任何错误,所以我得出结论,它是片段着色器

该错误是从着色器类的此部分引发的:

if(glGetShaderi(shader, GL_COMPILE_STATUS) == 0)
{
    System.err.println(glGetShaderInfoLog(shader, 1024));
    System.exit(1);
}
这让我相信问题在于着色器没有编译,因为某些构造函数有太多参数。我不知道它指的是什么构造函数

任何帮助都将不胜感激

我不知道它指的是什么构造函数

着色器代码中的一个:

fragColor = vec4(0,0, 1.0, 1.0, 1.0);

这是一个
vec4
构造函数。你给了它5个参数。“0,0”是其中的两个。我怀疑你是想用句号而不是逗号。

谢谢。我在发布我的问题后有点明白了,但我很感谢你的回复。希望它能帮助其他人。
fragColor = vec4(0,0, 1.0, 1.0, 1.0);