[英]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.