2017-08-11 7 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の基本アラインメントを有する。

  • 2成分ベクトル、cサイズNのomponents、2 N.

  • サイズNの成分と3または4成分ベクトルの塩基アラインメントを有し、アレイが有する4 N.

  • の塩基アラインメントを有していますその要素タイプのベースアライメントと同じベースアライメントが16の倍数に切り上げられます。

  • 構造体は、そのメンバーの最大のベースアライメントに等しいベースアライメントを持ち、16の倍数に切り上げられます

  • C列の行主行列は、基本整列equ c行列成分のベクトルの基本的なアラインメントに等しい。

  • カラムメジャーマトリックスは、マトリックスカラムタイプのベースアライメントと同じベースアライメントを持ちます。 GLSLで

std140レイアウトはこれらのルールを満たします。

これについての詳細は、仕様の14.5.4. Offset and Stride Assignmentセクションを参照してください。

関連する問題