[英]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
即可獲取glEnableVertexAttribArray
和glVertexAttribPointer
調用的屬性索引。 這些電話仍然是必要的。
着色器聲明是不夠的,因為您仍然需要提供glVertexAttribPointer
參數中的信息,例如規范化,數據類型等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.