मैं हाल ही में एचएलएसएल प्रोग्रामिंग में शामिल हो रहा हूं और मैं बहुत उत्सुक हूं कि कुछ चीजें मैं वास्तव में कैसे कर रहा हूं।कुछ सरल एक्सएनए/एचएलएसएल प्रश्न
उदाहरण के लिए, मुझे यह बहुत ही सरल शेडर मिला है जो किसी भी तिल रंगीन पिक्सेल को लाल-आश रंग में रंग देता है।
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
विधानसभा में एक रजिस्ट्री है कि वर्तमान में इस्तेमाल किया पिक्सेल रंग को धारण करता है सकते हैं जीपीयू में (यह पूरी तरह से गलत हो सकता है, मैं बस यह सोच रहा हूं कि मुझे क्या लगता है)
और यदि ऐसा है, तो क्या इसका मतलब यह है कि float2 texCoords : TEXCOORD0
जैसे कुछ निर्दिष्ट करना, डिफ़ॉल्ट स्थिति को जीपीयू संसाधित कर रहा है?
हालांकि रजिस्टर में नमूने को वास्तव में निर्दिष्ट किया गया है, हालांकि? मैंने यह निर्दिष्ट नहीं किया है कि यह किस रजिस्टर से नमूना पकड़ता है, इसलिए मुझे लगता है कि यह बिना किसी कोड विनिर्देश के डिफ़ॉल्ट रूप से s0 को पकड़ लेगा? इसके अलावा, आप एक और सवाल उठाते हैं: 'नमूना' काम 'sampler2D' जैसा ही होगा? – inline
जो भी ड्रा ऑपरेशन आप करते हैं, उस रजिस्टरों का उपयोग करें, यदि आप स्प्राइटबैच का उपयोग कर रहे हैं या उस बनावट से पहले मूल प्रभाव डाल रहे हैं, तो यह आंतरिक रूप से किया जा रहा है ... – Blau
मीठे। मेरे लिए कुछ चीजों को साफ़ करने के लिए धन्यवाद। :) – inline