簡體   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