我正在传递一个具有以下布局的常量缓冲区:
struct
{
float spread;
D2D1_POINT_2F dimension;
D2D1_POINT_2F dimension2;
} m_constants;
为了调试,维度和维度2具有相同的值。
在着色器中我有:
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;
}
理论上,这应该输出一个渐变,左下角是绿色,右上角是红色。它确实如此。但是,如果在着色器中我有宽度和高度来使用维度 2。我得到一个从左边的绿色到右边的黄色的水平渐变。
这是为什么?当我将 m_constants 传递给着色器时,两个维度都具有相同的值