5

次の均一なバッファがあります。

layout(std140) uniform Light
{
    vec4  AmbientLight;
    vec4  LightIntensity;
    vec3  LightPosition;
    float LightAttenuation;
};  

データと追加する必要があるパディングをバッファリングするときに、いくつかの問題があります。http://ptgmedia.pearsoncmg.com/images/9780321552624/downloads/0321552628_AppL.pdfを読んだところ、vec3 の最後にパディングのために 4 バイトを追加する必要があると書かれているので、合計 13 バイトをアップロードします。 「ライト」のバイト。ただし、これを行うと、「LightAttenuation」は 1 バイト先ではなく、「LightPosition」にパディングした値を取得するため、パディングしない場合はシェーダーで正しい値が取得されます。どうしてこれなの?

4

2 に答える 2

0

通常、はい。openGL は vec3 を vec4 として扱います。しかし、この場合の私の知る限り、float LightAttenuation を vec3 LightPosition に追加します - 全体的な vec4 を形成します (glsl コンパイラによって行われるある種の最適化)。構造全体のサイズは 3x vec4 になります。

LightAttenuation に vec3 または vec4 を使用してみてください。

于 2013-04-01T20:56:14.557 に答える