最近私はHLSLプログラミングに取り組んできましたが、私が実際にやっていることのいくつかが本当にうまくいくかどうか不思議です。いくつかの簡単なXNA/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が処理している現在の位置をデフォルトで取得することを意味するのでしょうか?
正確には、それはレジスタのサンプルに割り当てられますか?私はサンプルを取得するレジスタを指定していないので、デフォルトでコード指定なしでs0を取得すると思いますか? さらに、 'sampler'は' sampler2D'と同じように動作するのでしょうか? – inline
スプライトバッチや基本的なエフェクトを使用している場合は、そのテクスチャを使用していれば、そのレジスタを使用してください。 – Blau
Sweet。私のためにいくつかのものをクリアしていただきありがとうございます。 :) – inline