【发布时间】:2016-07-20 18:11:00
【问题描述】:
我正在使用 LWJGL 尝试制作 3D 游戏,但我遇到了一个我无法自行解决的错误。每当我运行程序时,都会出现错误:
java.lang.Exception:编译着色器代码时出错:2
我自己设置了这个错误,以在着色器编译失败时提醒我,它似乎每次都在这样做,我不明白为什么。
public static String loadResource(String file) throws Exception{
BufferedReader reader = new BufferedReader(new FileReader(new File(file)));
String out = "";
String s = reader.readLine();
while (s != null){
out += s + "\n";
s = reader.readLine();
}
reader.close();
return out;
}
这是我用来加载着色器代码文本并将其放入字符串的方法。我已经要求它事后打印出来,据我所知没有任何问题。
public void createVertexShader(String shaderCode) throws Exception{
vertexShaderId = createShader(shaderCode, GL_VERTEX_SHADER);
}
public void createFragmentShader(String shaderCode) throws Exception {
vertexShaderId = createShader(shaderCode, GL_FRAGMENT_SHADER);
}
以上这两种方法使用以下方法来创建顶点和片段着色器:
public int createShader(String shaderCode, int shaderType) throws Exception {
int shaderId = glCreateShader(shaderType);
if(shaderId == 0){
throw new Exception("Error creating shader code: " + shaderId);
}
glShaderSource(shaderId, shaderCode);
glCompileShader(shaderId);
if(glGetShaderi(shaderId, GL_COMPILE_STATUS) == 0){
throw new Exception("Error compiling shader code: " + shaderId);
}
glAttachShader(programId, shaderId);
return shaderId;
}
着色器创建时没有错误,但是当我检查它是否已正确编译时,它会抛出异常并停止我的程序。这是我的顶点和片段着色器:
顶点.vs
#version 150
layout (location=0) in vec3 pos;
void main()
{
gl_Position = vec4(position, 1.0);
}
片段.fs
#version 150
out vec4 fragColor;
void main()
{
fragColor = vec4(0.0, 0.5, 0.5, 1.0);
}
我已验证我在着色器中使用了正确的 GLSL 版本,但我从教程中获得了实际的着色器代码,所以我不知道语法是否严格正确。
【问题讨论】: