次のレイアウトで定数バッファーを渡します。
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をシェーダーに渡したとき、両方のディメンションの値は同じです。