繁体   English   中英

Open GLES 3.0中的布局限定符

[英]Layout Qualifiers in Open GLES 3.0

我正在尝试在Swift Playground中使用Open GLES 3.0 API(及其随附的核心330 GLSL着色器语言)。 我的顶点着色器顶部有以下声明:

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参数中的信息,例如规范化,数据类型等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM