Java 碎片着色器赢得';不编译
我试图让本教程中的着色器正常工作: 我将源代码复制到两个文件中,但两个文件都无法编译 这是我的代码:Java 碎片着色器赢得';不编译,java,opengl,compilation,glsl,lwjgl,Java,Opengl,Compilation,Glsl,Lwjgl,我试图让本教程中的着色器正常工作: 我将源代码复制到两个文件中,但两个文件都无法编译 这是我的代码: shaderProgram = glCreateProgram(); vertexShader = glCreateShader(GL_VERTEX_SHADER); fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); StringBuilder vertexShaderSource = new St
shaderProgram = glCreateProgram();
vertexShader = glCreateShader(GL_VERTEX_SHADER);
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
StringBuilder vertexShaderSource = new StringBuilder();
StringBuilder fragmentShaderSource = new StringBuilder();
try{
BufferedReader reader = new BufferedReader(new FileReader("src/shader.vert"));
String line;
line = reader.readLine();
while(line != null){
line = reader.readLine();
if(line != null){
vertexShaderSource.append(line).append('\n');
}
}
reader.close();
} catch (IOException e) {
System.err.println("Vertex no load.");
Display.destroy();
System.exit(1);
}
try{
BufferedReader reader = new BufferedReader(new FileReader("src/shader.frag"));
String line;
line = reader.readLine();
while(line != null){
line = reader.readLine();
if(line != null){
fragmentShaderSource.append(line).append('\n');
}
}
reader.close();
} catch (IOException e) {
System.err.println("Frag no load.");
Display.destroy();
System.exit(1);
}
System.out.println(fragmentShaderSource);
glShaderSource(vertexShader, vertexShaderSource);
glCompileShader(vertexShader);
if(glGetShader(vertexShader, GL_COMPILE_STATUS) == GL_FALSE){
System.err.println("Vertex no compile");
}
glShaderSource(fragmentShader, fragmentShaderSource);
glCompileShader(fragmentShader);
if(glGetShader(fragmentShader, GL_COMPILE_STATUS) == GL_FALSE){
System.err.println("frag no compile");
}
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
glValidateProgram(shaderProgram);
我以前使用过着色器,所以这不是我所知道的设置,但是当我复制和粘贴时,两个文件都不会再编译了
我的设置有什么问题吗
编辑>>>
我似乎无法导入glGetShaderiv
我使用LWJGL并从那里导入了所有内容。我会丢失一个JAR文件吗
编辑>>>
相关问题:
您读取的源文件不正确
line = reader.readLine();
while(line != null){
line = reader.readLine();
if(line != null){
fragmentShaderSource.append(line).append('\n');
}
}
在这里,您首先读取文件的第一行。如果不为null,则继续读取行并将其附加到缓冲区。但是,实际上并没有在循环外部的readLine()
语句后面追加该行,这意味着它将被丢弃,着色器编译器将获得缺少第一行的源文件。因此它不知道如何改变vec2 vTexCoord代码>或采样器2D myTexture代码>,在稍后代码中使用时引发编译器错误
有几种方法可以解决此问题:
使用哪一种取决于您的偏好。1包含冗余代码,这几乎不是最好的解决方案。2是读取任意文件的常用方式;虽然3较短,但有些人不喜欢在循环控制语句中指定变量。您读取的源文件不正确
line = reader.readLine();
while(line != null){
line = reader.readLine();
if(line != null){
fragmentShaderSource.append(line).append('\n');
}
}
在这里,您首先读取文件的第一行。如果不为null,则继续读取行并将其附加到缓冲区。但是,实际上并没有在循环外部的readLine()
语句后面追加该行,这意味着它将被丢弃,着色器编译器将获得缺少第一行的源文件。因此它不知道如何改变vec2 vTexCoord代码>或采样器2D myTexture代码>,在稍后代码中使用时引发编译器错误
有几种方法可以解决此问题:
使用哪一种取决于您的偏好。1包含冗余代码,这几乎不是最好的解决方案。2是读取任意文件的常用方式;虽然3较短,但有些人不喜欢在循环控制语句中指定变量。您读取的源文件不正确
line = reader.readLine();
while(line != null){
line = reader.readLine();
if(line != null){
fragmentShaderSource.append(line).append('\n');
}
}
在这里,您首先读取文件的第一行。如果不为null,则继续读取行并将其附加到缓冲区。但是,实际上并没有在循环外部的readLine()
语句后面追加该行,这意味着它将被丢弃,着色器编译器将获得缺少第一行的源文件。因此它不知道如何改变vec2 vTexCoord代码>或采样器2D myTexture代码>,在稍后代码中使用时引发编译器错误
有几种方法可以解决此问题:
使用哪一种取决于您的偏好。1包含冗余代码,这几乎不是最好的解决方案。2是读取任意文件的常用方式;虽然3较短,但有些人不喜欢在循环控制语句中指定变量。您读取的源文件不正确
line = reader.readLine();
while(line != null){
line = reader.readLine();
if(line != null){
fragmentShaderSource.append(line).append('\n');
}
}
在这里,您首先读取文件的第一行。如果不为null,则继续读取行并将其附加到缓冲区。但是,实际上并没有在循环外部的readLine()
语句后面追加该行,这意味着它将被丢弃,着色器编译器将获得缺少第一行的源文件。因此它不知道如何改变vec2 vTexCoord代码>或采样器2D myTexture代码>,在稍后代码中使用时引发编译器错误
有几种方法可以解决此问题:
使用哪一种取决于您的偏好。1包含冗余代码,这几乎不是最好的解决方案。2是读取任意文件的常用方式;虽然3较短,但有些人不喜欢在循环控制语句中指定变量。试着打印编译器错误,你能解释一下怎么做吗?Eclipse无法识别该语句。你使用的是什么openGL版本?你在使用核心档案吗?您发布的着色器是旧的OpenGL(<3.3),如果您使用的是core pofile>=3.3,则不能使用像gl\u MultiTexCoord0
这样的变量。可能这会导致错误GLGetString(GL_版本)-->4.2.0尝试打印编译器错误,您能解释一下如何执行吗?Eclipse无法识别该语句。您使用的是哪个openGL版本?你在使用核心档案吗?您发布的着色器是旧的OpenGL(<3.3),如果您使用的是core pofile>=3.3,则不能使用像gl\u MultiTexCoord0
这样的变量。可能这会导致错误GLGetString(GL_版本)-->4.2.0尝试打印编译器错误,您能解释一下如何执行吗?Eclipse无法识别该语句。您使用的是哪个openGL版本?你在使用核心档案吗?您发布的着色器是旧的OpenGL(<3.3),如果您使用的是core pofile>=3.3,则不能使用像gl\u MultiTexCoord0
这样的变量。可能这会导致错误GLGetString(GL_版本)-->4.2.0尝试打印编译器错误,您能解释一下如何执行吗?Eclipse无法识别该语句。您使用的是哪个openGL版本?你在使用核心档案吗?您发布的着色器是旧的OpenGL(<3.3),如果您使用的是core pofile>=3.3,则不能使用像gl\u MultiTexCoord0
这样的变量。这可能会导致错误GLGetString(GL_版本)-->4.2.0I实现中断逻辑。我认为这修复了顶点着色器,但片段着色器仍然无法编译。我猜“myTexture”没有被指定(它没有),但这仍然不能解释为什么eclipse不能识别它