متعددة rendertargets في DX9
سؤال
لقد حددت
m_lpD3DDevice->SetRenderTarget(0,Buffer1);
m_lpD3DDevice->SetRenderTarget(1,Buffer2);
m_lpD3DDevice->SetRenderTarget(2,Buffer2);
وإذا قمت بتقديم Pixelshader يؤثر فقط على هدف التجسيد الأول.
انها هيكل الإخراج هو
struct PS_OUTPUT
{
float4 Color0 : COLOR0;
float4 Color1 : COLOR1;
float4 Color2 : COLOR2;
};
ما الذي يجب علي فعله للتأثير على أهداف الفعلين الآخرين أيضا؟
المحلول 3
أخيرا لدي الجواب الآن. كل ما كان علي فعله هو ضبط
ColorWriteEnable = red | green | blue;
في ملف التأثير. كل شيء آخر كان صحيحا. لكنني لا أعرف لماذا جعل هذا الأمر يعمل.
نصائح أخرى
في شادر بكسل الخاص بك، تأكد من أنك تعيد من الهيكل وليس العذراء. أيضا لا تطرد Semantion Color0 إلى توقيع الوظيفة، وهذا لا يفعل هذا:
PS_OUTPUT myPS(VS_OUTPUT): COLOR0
أنا duobt التي سوف copmpile، ولكن قد تخلط بين المترجم. تشبه MRT بسيطة يشبه هذا:
PS_OUTPUT myPS(VS_OUTPUT)
{
PS_OUTPUT out;
out.color0 = float4(0.5,0.5,0.5,1.0);
out.color1 = float4(0.2,0.5,0.8,1.0);
out.color2 = float4(0.8,0.5,0.2,1.0);
return out;
}
ما هي Buffer0،1 & 2؟ هل هم نتيجة للدعوة إلى Eremetexture ()؟ (أو بالأحرى سطح من هذا الملمس). إذا كانت كذلك، تأكد من إنشاء الملمس مع إشارة الاستخدام المستهدف Render: d3dusage_rendertarget.
تأكد من أن بطاقتك يمكن أن تدعم التقديم إلى أكثر من RT. (نسيت كيفية القيام بذلك - لكنني أشك في أنها لن تدعمها.)
إذا قمت بإنشاء المخازن المؤقتة بشكل صحيح، فقم بتعيينها بشكل صحيح، وكتابة القيم الصحيحة من Shader Pixel بشكل صحيح، ثم لا أرى ما قد يحدث خطأ. ماذا يقول بيكس * عن MRTS؟ هل هم BENIG
ملاحظة: هل نأمل أن تصدر مكالمة رسم، أليس كذلك؟ :)
* PIX هو تطبيق في DirectX SDK. إذا لم تستخدمها من قبل، فأنت تفتقد حقا :)
هناك قناع ملون منفصل للكتابة لكل هدف. قناع الكتابة الافتراضي للهدف 0 هو 0xf (تمكين جميع القنوات)، ولكن الافتراضي للأهداف الأخرى هو 0x0. تجاوز هذا في ملف التأثير هو طريقة واحدة (هل ترغب في تمكين Alpha على الرغم من؟)، أو يمكنك تغييره باستخدام SetRenderstate. انظر الوثائق ل d3drs_colorwriteenable {1،2،3} الولايات.