1

次のレイアウトで定数バッファーを渡します。

struct 
{
    float spread;
    D2D1_POINT_2F dimension;
    D2D1_POINT_2F dimension2;
} m_constants;

デバッグのために、dimensionとdimension2の値は同じです。

シェーダーには次のものがあります。

cbuffer constants
{
    float spread;
    float2 dimension;
    float2 dimension2;
};

float4 main(
    float4 pos      : SV_POSITION,
    float4 posScene : SCENE_POSITION,
    float4 uv0      : TEXCOORD0
    ) : SV_Target
{
    float width = dimension.x;
    float height = dimension.y;
    float2 uv2 = float2(posScene.x / width, posScene.y / height);
    color.rgb = float3(uv2.xy,  0);
    return color;
}

これは、理論的には、左下に緑、右上に赤のグラデーションを出力するはずです。そして、そうです。ただし、シェーダーで、代わりにdimension2を使用するための幅と高さがある場合。左側の緑から右側の黄色への水平方向のグラデーションが表示されます。

何故ですか?m_constantsをシェーダーに渡したとき、両方のディメンションの値は同じです。

4

1 に答える 1