Несколько простых вопросов по XNA / HLSL

В последнее время я начал программировать на HLSL, и мне очень любопытно, КАК некоторые из моих действий на самом деле работают. .

Например, у меня есть очень простой шейдер, который оттеняет любые пиксели бирюзового цвета до красного цвета.

sampler2D mySampler;

float4 MyPixelShader(float2 texCoords : TEXCOORD0): COLOR
{
    float4 Color;
    Color = tex2D(mySampler, texCoords.xy);

    if(Color.r == 0 && Color.g == 1.0 && Color.b == 1.0)
    {
        Color.r = 1.0;
        Color.g = 0.5;
        Color.b = 0.5;
    }
    return Color;
}

technique Simple
{
    pass pass1
    {
        PixelShader = compile ps_2_0 MyPixelShader();
    }
}

Я понимаю, что функция tex2D захватывает цвет пикселя в указанном месте, но я не понимаю, как mySampler вообще имеет какие-либо данные. Я вообще не устанавливаю его и не передаю текстуру, но она волшебным образом содержит данные моей текстуры.

Кроме того, в чем разница между такими вещами, как COLOR и COLOR0 или TEXCOORD и TEXCOORD0

Я могу сделать логическое предположение и сказать, что COLOR0 - это реестр в сборке, в котором хранится текущий используемый цвет пикселей в GPU. (это может быть совершенно неверно, я просто излагаю то, что я думаю)

И если да, то означает ли это указание чего-то вроде float2 texCoords: TEXCOORD0 по умолчанию захватит текущую позицию GPU обрабатывает?

11
задан inline 1 October 2011 в 00:53
поделиться