簡體   English   中英

GLSL Shader無法編譯,Java和LWJGL着色器錯誤

[英]GLSL Shader does not compile, Java and LWJGL shader error

現在在編譯着色器時遇到了幾次此錯誤。

這是infoLog /錯誤

頂點着色器無法編譯,並出現以下錯誤:錯誤:0:1:錯誤(#132)語法錯誤:“ <”分析錯誤錯誤:錯誤(#273)1編譯錯誤。 沒有生成代碼

片段着色器也會發生這種情況。 這是我非常基本的測試頂點和片段着色器代碼:

@version 330

layout (location = 0) in vec3 position;

void main(){

    gl_Position = vec4(position, 1.0);
}

這是碎片:

@version 330

out vec4 fragColor;

void main(){

    fragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

這是具有所有load / compile / link方法的Shader類:

public  abstract class Shader {

    private int program;

    public Shader(){


        program = glCreateProgram();

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



    public void bind(){

         glUseProgram(program);

    }

    public 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");      
            System.exit(1);
        }

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

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

        glAttachShader(program, shader);
    }


    public String loadShader(String fileName){


        StringBuilder shaderSource = new StringBuilder();
        BufferedReader shaderReader = null;

        try{

            shaderReader = new BufferedReader(new FileReader("./res/shaders/" + fileName));

            String line;
            while((line = shaderReader.readLine()) != null){

                shaderSource.append(line).append("\n");
            }

            shaderReader.close();


        }catch(Exception e){
            e.printStackTrace();
            System.out.println("HERE IT IS!!!!");
            System.exit(1);
        }

        return shaderSource.toString();

    }

    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);
        }

    }
}

我做了很多實驗來找出問題所在,然后將其縮小為兩件事之一。(A)以某種方式從loadShader()方法的文件中加載文本將返回一堆隨機符號(注意在infoLog頂部,解析錯誤指示字符為“ <”,這顯然在兩個着色器中均不存在,或者(B)錯誤與addProgram()方法中的glCompileShader(shader)調用有關。選項A更有可能,但是正如我所說,fileLoader從來沒有做過。

答案是.......在着色器代碼中聲明版本時,它不是#。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM