我正在尝试渲染一个正方形,但它只渲染一个点,我不确定为什么。我知道发送到 gpu 的数据是有效的,这是正在发送的数据
struct gpuData{
glm::vec3 topLeft
glm::vec2 size
int isVisible
}
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(gpuData), (void*)0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(gpuData), (void*)(sizeof(glm::vec3)));
glEnableVertexAttribArray(1);
glVertexAttribIPointer(2, 1, GL_INT, sizeof(gpuData), (void*)(sizeof(glm::vec3) + sizeof(glm::vec2)));
glEnableVertexAttribArray(2);
这是我的顶点着色器
#version 330 core
layout (location = 0) in vec3 topLeft;
layout (location = 1) in vec2 size;
layout (location = 2) in int isVisible;
flat out vec2 geoSize;
uniform mat4 projection;
uniform mat4 view;
void main(){
geoSize=size;
if(isVisible==1)
gl_Position=projection * view * vec4(topLeft,1.0);
else
gl_Position=vec4(-10,-10,0,0);
}
几何着色器
#version 330 core
layout (points) in;
layout (triangle_strip, max_vertices=4) out;
flat in vec2 geoSize[];
void main(){
vec4 topLeft=gl_in[0].gl_Position;
gl_Position=topLeft
EmitVertex();
gl_Position=topLeft+vec4(2,0,0,0);
EmitVertex();
gl_Position=topLeft+vec4(0,-2,0,0);
EmitVertex();
gl_Position=topLeft+vec4(2,-2,0,0);
EmitVertex();
EndPrimitive();
}
片段着色器并不重要,因为什么都没有。
画法是这样的
glBindVertexArray(vertexArrayObject);
glDrawArrays(GL_POINTS, 0, 1);
我为投影和视图设置了制服,但我认为这不是问题,因为点准确地呈现在我想要呈现的位置,只是其余的三角形没有呈现并且没有正方形在屏幕上。在几何着色器中,我没有使用大小,因为我最初认为这是因为我没有正确发送数据,但即使有硬编码数字,它仍然只渲染一个点。我的脸部剔除是顺时针的。