代码之家  ›  专栏  ›  技术社区  ›  Owen Griffiths

在几乎没有上下文说明原因的情况下使用GLSL出错

  •  0
  • Owen Griffiths  · 技术社区  · 2 年前

    错误代码为:

    Error compiling Shader code: ERROR: 0:1: '' : syntax error: #version 我的着色器编译器代码是:

    public class Shader {
    
        private int shaderProgramID;
        private boolean beingUsed = false;
    
        private String vertexSource;
    
        public Shader (int type, String path) {
            shaderProgramID = glCreateProgram();
    
            StringBuilder builder = new StringBuilder();
    
            try (InputStream in = new FileInputStream(path);
                 BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
                String line;
                while ((line = reader.readLine()) != null) {
                    builder.append(line).append("\n");
                }
    
            } catch (IOException ex) {
                throw new RuntimeException("Failed to load a shader file!"
                        + System.lineSeparator() + ex.getMessage());
            }
            vertexSource = builder.toString();
    
        }
    
    
        public void compile() {
            // ============================================================
            // Compile and link shaders
            // ============================================================
            int vertexID, fragmentID;
    
            // First load and compile the vertex shader
            int shaderId = glCreateShader(GL_VERTEX_SHADER);
    
    
            glShaderSource(shaderId, vertexSource);
            System.out.println(vertexSource);
            glCompileShader(shaderId);
    
            if (glGetShaderi(shaderId, GL_COMPILE_STATUS) == 0) {
                System.out.println("Error compiling Shader code: " + glGetShaderInfoLog(shaderId, 1024));
            }
    
            glAttachShader(shaderProgramID, shaderId);
            glLinkProgram(shaderProgramID);
            if (glGetProgrami(shaderProgramID, GL_LINK_STATUS) == 0) {
                System.out.println("Error linking shader program: " + glGetProgramInfoLog(shaderProgramID));
            }
        }
        
        public void use() {
            if (!beingUsed) {
                // Bind shader program
                glUseProgram(shaderProgramID);
                beingUsed = true;
            }
        }
    
        public int getAttributeLocation(CharSequence name) {
            return glGetAttribLocation(shaderProgramID, name);
        }
    
    
        public void detach() {
            glUseProgram(0);
            beingUsed = false;
        }
    
    

    着色器代码为:

    #version 120 core
    
    void main(){
        realpos.x = (1920 / 2) + 40 * aPosition.x;
        realpos.y = (1000 / 2) + 40 * aPosition.y;
       
    
    }
    
    

    我使用带有lwjgl库的java 11,opengl版本是2.1 Metal-83.1。同样值得注意的是,我的系统是一个m2的mac。

    我早些时候有这个错误,后来它奇怪地消失了,现在又回来了,我试着更改着色器版本,但opengl 2.1确实使用了120,其他版本给出了错误版本等的预期错误。 我已经做了好几个小时的工作,所以如果有任何帮助,我们将不胜感激! (第一次在这里发布,所以请让我知道我是否可以更好地格式化它:>)

    0 回复  |  直到 2 年前
        1
  •  0
  •   Nifil    2 年前

    据我所知,120版本没有核心配置文件 https://www.khronos.org/opengl/wiki/OpenGL_Context#Context_types

    所以你应该使用

    #version 120