Open Gles 3.0中的布局预选赛



我正在尝试使用开放的GLES 3.0 API(随附的Core 330 GLSL着色器语言(在Swift游乐场中。我的顶点着色器的顶部有以下声明:

layout(location = 0) in vec4 a_Position;

我对布局限定符的理解是指定a_Position在顶点缓冲区对象的属性索引中的位置。(随着我对vao的理解的理解,松散了..(。

但是我的三角形不会渲染,除非我还包括以下代码:

glEnableVertexAttribArray(0)
glVertexAttribPointer(
        0,
        3,
        GLenum(GL_FLOAT),
        GLboolean(GL_FALSE),
        GLsizei(MemoryLayout<Vertex>.size),
        BUFFER_OFFSET(0))

但是我对布局预选赛的理解会向我提出,这不是必需的,因为它已经指定了a_Position位于顶点属性数组中的位置。(在索引0(。

因此,我要么缺少一些较小的细节,要么我对GPU上着色器中如何访问VAO数据的理解是有缺陷的。这可能是两者兼而有之。那么,为什么使用布局预选赛的着色器声明足以将我的顶点位置放入a_Position

layout(location=0)表示您不必致电glGetVertexAttribLocation即可获取glEnableVertexAttribArrayglVertexAttribPointer调用的属性索引。这些电话仍然是必要的。

着色器声明还不够,因为您仍然需要提供glVertexAttribPointer参数中的信息,例如归一化,数据类型等

相关内容

  • 没有找到相关文章

最新更新