Python中文网

一个关于 编程问题的解答网站.

有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java OpenGL着色器错误(存储限定符、未声明的标识符和浮点转换)

我从OpenGL开始,制作了我的第一个着色器(以下是a tutorial)。尽管严格遵守了教程,但我还是犯了一些错误(与教程的作者不同)

尽管谷歌搜索很彻底,很有创意,但我没有找到任何帮助或解释问题所在的方法

我的着色器的来源如下:

basicVertex。vs:

#version 330

layout (location = 0) in vec3 position;

void main() 
{
    gl_Position = vec4(position, 1.0);
}



basicFragment.fs:

#version 330

out vec4 fragColor;

void main() 
{
    fragColor = vec4(0.0, 1.0, 1.0); 
}

错误如下:

Shader could not be run: 
ERROR: 0:? : '' : storage qualifier not valid with layout qualifier id 
ERROR: 0:7: 'gl_Position' : undeclared identifier 
ERROR: 0:7: 'assign' :  cannot convert from '4-component vector of float' to 'float'

(这是整个命令行输出)

以下是着色器加载/编译代码:

包裹英国。哥斯芬克尔公司。城堡3D。着色器

导入静态组织。lwjgl。opengl。GL20; 导入静态组织。lwjgl。opengl。GL32

公共类着色器{ 私人int计划

    public Shader() throws ShaderLoadException {
            program = glCreateProgram();

            if (program == 0) {
                    throw new ShaderLoadException();
            }
    }

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

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

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

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

    public void compileShader() throws ShaderLoadException {
            glLinkProgram(program);

            if (glGetProgrami(program, GL_LINK_STATUS) == 0) {
                    throw new ShaderLoadException(glGetShaderInfoLog(program, 1024));
            }

            glValidateProgram(program);

            if (glGetProgrami(program, GL_VALIDATE_STATUS) == 0) {
                    throw new ShaderLoadException(glGetShaderInfoLog(program, 1024));
            }
    }

    private void addProgram(String text, int type) throws ShaderLoadException {
            int shader = glCreateShader(type);
            if (shader == 0) {
                    throw new ShaderLoadException();
            }
            glShaderSource(shader, text);
            glCompileShader(shader);

            if (glGetShaderi(shader, GL_COMPILE_STATUS) == 0) {
                    throw new ShaderLoadException(glGetShaderInfoLog(shader, 1024));
            }

            glAttachShader(program, shader);
    }

}

如果有人能指点我解决问题的方法或建议,我很乐意听到。然而,请不要只是说“了解更多OpenGL”,因为这是没有帮助的。谢谢


共 (0) 个答案