链接顶点着色器2次有效,但不链接顶点和片段着色器



我已经好几天没有调试我最近从LWJGL2更新到LWJGL3的项目了。我发现了一些问题,但它仍然不起作用,所以我做了一个最小的项目,比如真正的最小项目,并将其与我在网上找到的一个工作项目进行了比较。我发现这两个项目完全相同,只是在工作项目中我创建了两次顶点着色器,并在程序中链接了这两个,而在另一个项目中,我链接了正确的项目,它们都编译了,但没有渲染。

这是Shader类:

private int vertexID, fragmentID, programID;

public Shader(String vertexPath, String fragmentPath) {
vertexID = loadShader(vertexPath,GL20.GL_VERTEX_SHADER);
fragmentID = loadShader(fragmentPath,GL20.GL_FRAGMENT_SHADER); //Not working
//fragmentID = loadShader(vertexPath,GL20.GL_VERTEX_SHADER); // Working ?????
programID = GL20.glCreateProgram();
GL20.glAttachShader(programID, vertexID);
GL20.glAttachShader(programID, fragmentID);
GL20.glLinkProgram(programID);
GL20.glValidateProgram(programID);
}
private int loadShader(String file,int type) {
StringBuilder shaderSource = new StringBuilder();
try{
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
while((line = reader.readLine())!=null){
shaderSource.append(line).append("//n");
}
reader.close();
}catch(IOException e){
e.printStackTrace();
System.exit(-1);
}
int shaderID = GL20.glCreateShader(type);
GL20.glShaderSource(shaderID, shaderSource);
GL20.glCompileShader(shaderID);
if(GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS )== GL11.GL_FALSE){
System.out.println(GL20.glGetShaderInfoLog(shaderID, 500));
System.err.println("Could not compile shader!");
System.exit(-1);
}
return shaderID;
}

这是碎片着色器:

#version 460 core
in vec3 color;
out vec4 outColor;
void main() {
outColor = vec4(color, 1.0);
}

和顶点着色器:

#version 460 core
in vec3 position;
out vec3 color;
void main() {
color = vec3(1,1,1);
}

这是在创建显示后立即调用的创建Shader类的行:

shader = new Shader("src/mainVertex", "src/mainFragment");

我不知道发生了什么,也许问题出在碎片着色器上,也许是读者。谢谢你的帮助。

正如@Rabbid76所说,我在顶点着色器中缺少gl_Position,但我仍然不知道为什么链接两次顶点着色器有效。

最新更新