OpenGL 和 GLSL 几何着色器只渲染一个点而不是三角形

问题描述 投票:0回答:0

我正在尝试渲染一个正方形,但它只渲染一个点,我不确定为什么。我知道发送到 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);

我为投影和视图设置了制服,但我认为这不是问题,因为点准确地呈现在我想要呈现的位置,只是其余的三角形没有呈现并且没有正方形在屏幕上。在几何着色器中,我没有使用大小,因为我最初认为这是因为我没有正确发送数据,但即使有硬编码数字,它仍然只渲染一个点。我的脸部剔除是顺时针的。

c++ opengl glsl glm-math
© www.soinside.com 2019 - 2024. All rights reserved.