【发布时间】:2014-12-05 00:11:51
【问题描述】:
我现在在编译我的着色器时遇到过几次这个错误。
这里是信息日志/错误
顶点着色器编译失败,出现以下错误: 错误:0:1:错误(#132)语法错误:“
这也发生在片段着色器上。这是我非常非常基本的测试顶点和片段着色器代码:
@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 顶部的通知中,解析错误表明字符是“
【问题讨论】:
-
看完后能不能打印出整个shader源码? (或用调试器检查)
-
不应该是#version...而不是@version?
-
你知道吗......我认为你是对的......我希望不是因为那时我是个白痴......神圣的废话......那是它......认为这是一个我搞砸了预处理器标签...facepalm...非常感谢
标签: java opengl glsl shader lwjgl