Lwjgl编译错误:顶点错误.无法解决这个问题



我的问题是我的顶点着色器和片段着色器有错误,但我找不到它们。

default.glsl:

#type vertex
#version 330 core
layout (location=0) in vec3 aPos;
layout (location=1) in vec4 aColor;
void main()
{
fColor = aColor;
gl_Position = vec4(aPos, 1.0);
}
#type fragment
#version 330 core
in vec4 fColor;
out vec4 color;
void main()
{
color = fColor;
}

编译代码:

// Compile and link the shaders
// Compile the vertex shader
vertexID = glCreateShader(GL_VERTEX_SHADER);
// Pass the shader source code to the GPU
glShaderSource(vertexID, vertexShaderSource);
glCompileShader(vertexID);
// Check for errors in compilation
if (glGetShaderi(vertexID, GL_COMPILE_STATUS) == GL_FALSE) {
System.err.println("Failed to compile vertex shader!");
System.err.println(glGetShaderInfoLog(vertexID));
//System.exit(-1);
}
// Compile the fragment shader
fragmentID = glCreateShader(GL_FRAGMENT_SHADER);
// Pass the shader source code to the GPU
glShaderSource(fragmentID, fragmentShaderSource);
glCompileShader(vertexID);
// Check for errors in compilation
if (glGetShaderi(fragmentID, GL_COMPILE_STATUS) == GL_FALSE) {
System.err.println("Failed to compile vertex shader!");
System.err.println(glGetShaderInfoLog(fragmentID));
//System.exit(-1);
}
// Link shaders and check for errors
shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexID);
glAttachShader(shaderProgram, fragmentID);
glLinkProgram(shaderProgram);
// Check for linking errors
int success = glGetProgrami(shaderProgram, GL_LINK_STATUS);
if (success == GL_FALSE) {
int len = glGetProgrami(shaderProgram, GL_INFO_LOG_LENGTH);
System.out.println("ERROR: 'defaultShader.glsl'nt Linking of shaders failed");
System.out.println(glGetShaderInfoLog(shaderProgram, len));
//assert false : "";
}
// Generate VAO, VBO and EBO buffer objects, and send them to the GPU
vaoID = glGenVertexArrays();
glBindVertexArray(vaoID);
// Create a float buffer of vertices
FloatBuffer vertexBuffer = BufferUtils.createFloatBuffer(vertexArray.length);
vertexBuffer.put(vertexArray).flip();
// Create the VBO and upload the vertex buffer
vboID = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBufferData(GL_ARRAY_BUFFER, vertexBuffer, GL_STATIC_DRAW);
// Create the indices and upload
ByteBuffer buffer;
IntBuffer elementBuffer = BufferUtils.createIntBuffer(elementArray.length);
elementBuffer.put(elementArray).flip();
eboID = glGenBuffers();
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eboID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, elementBuffer, GL_STATIC_DRAW);
// Add the vertex attribute pointers
int positionsSize = 3;
int colourSize = 4;
int floatSizeBytes = 4;
int vertexSizeBytes = (positionsSize + colourSize) * floatSizeBytes;
glVertexAttribPointer(0, positionsSize, GL_FLOAT, false, vertexSizeBytes, 0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, colourSize, GL_FLOAT, false, vertexSizeBytes, positionsSize * floatSizeBytes);
glEnable(1);

问题是,如果我将编译代码从出现错误时不关闭窗口更改为完全绘制正方形。

但出于某种原因,我得到了这个:

Failed to compile vertex shader!

这不可能是lwjgl的错误。我刚刚用它做了另一个项目,它运行得很好。

我搞不清楚这里出了什么问题。

顶点着色器中存在错误。缺少输出变量fColor的声明:

layout (location=0) in vec3 aPos;
layout (location=1) in vec4 aColor;
out vec4 fColor;                     // <--- this is missing 
void main()
{
fColor = aColor;
gl_Position = vec4(aPos, 1.0);
}

最新更新