编译我的着色器时,我几次遇到此错误 .
这是infoLog /错误
顶点着色器无法编译时出现以下错误:错误:0:1:错误(#132)语法错误:“<”解析错误错误:错误(#273)1编译错误 . 没有代码生成
这发生在片段着色器上 . 这是我非常基本的测试顶点和frag着色器代码:
@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);
}
这是具有所有加载/编译/链接方法的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 up的注意事项中,解析错误表明字符为“<”,在任何一个着色器中都显然不均匀 . 或者(B)错误是在addProgram()方法中使用glCompileShader(着色器)调用 . 我认为选项A更有可能,但正如我所说,fileLoader以前从未这样做过 .
1 回答
答案是.......在着色器代码中声明版本时,它是#not @ ...