【发布时间】:2017-05-07 04:15:50
【问题描述】:
我正在 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?
【问题讨论】:
标签: graphics opengl-es glsl opengl-es-2.0 swift-playground