2017-08-11 84 views
-1
struct Light { 

    glm::vec4 position; 
    glm::vec4 color; 
    glm::vec4 attenuation; 

}; 

struct UBO { 

    // View and projection matrix 
    glm::mat4 view; 
    glm::mat4 proj; 

    // Fog 
    glm::vec4 skyColor; 
    float density; 
    float gradient; 

    // Clipping plane 
    glm::vec4 clippingPlane; 

    // Lights 
    Light lights[4]; 

}; 

比對福爾康API:UBOs以及它們在福爾康

的UBO結構是每個更新的每個幀,然後傳遞到頂點着色器上形成均勻緩衝區。 渲染的圖像顏色錯誤,因爲光陣列沒有正確傳遞。

頂點着色器綁定:

layout (binding = 1) uniform UBO { 

    // View and projection matrix 
    mat4 view; 
    mat4 proj; 

    // Fog 
    vec4 skyColor; 
    float density; 
    float gradient; 

    // Clipping plane 
    vec4 clippingPlane; 

    // Lights 
    Light lights[4]; 

} ubo; 

我需要以某種方式排列的數據?

回答

1

從規格:

標準統一緩衝器佈局

的OpTypeStruct成員的類型的「基礎對準」被遞歸地定義如下:

  • 的標量大小N具有N的鹼基對齊。

  • 雙分量向量,其中c大小爲N omponents,具有2 N.

  • 三或四成分的矢量,具有大小爲N部件的基部對準,具有4 N.

  • 的基部對準的陣列具有基本對齊方式等於其元素類型的基本對齊方式,取整爲16的倍數。

  • 結構的基本對齊方式等於其任何成員的最大基本對齊方式,取整爲16的倍數。

  • C列的行 - 主矩陣具有基本對齊等式a到C矩陣分量向量的基本對齊。

  • 列主矩陣具有等於矩陣列類型的基本對齊的基本對齊。

std140佈局GLSL滿足這些規則。

更多關於這個在14.5.4. Offset and Stride Assignment規範部分。