В вашем пиксельном шейдере убедитесь, что вы возвращаете структуру, а не float4. Также не привязывайте семантику COLOR0 к сигнатуре функции, то есть не делайте этого:
PS_OUTPUT myPS(VS_OUTPUT): COLOR0
Я думаю, что это поможет, но это может запутать компилятор. Простой шейдер 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;
}
Что такое буфер 0, 1 и 2? Являются ли они результатом вызова CreateTexture ()? (точнее поверхность из этой текстуры). Если это так, убедитесь, что текстура была создана с флагом использования цели рендеринга: D3DUSAGE_RENDERTARGET.
Убедитесь, что ваша карта поддерживает рендеринг более чем на одну RT. (забыл, как это сделать - но я сомневаюсь, что это не поддержит их.)
Если вы правильно создали буферы, правильно их установили и правильно выводите правильные значения из пиксельного шейдера, то я не вижу, что может пойти не так. Что говорит PIX * о MRTS? Написаны ли им добрые дела, и что их отображение идет не так?
ps: Вы, надеюсь, сделали колл, верно? :)
* PIX - это приложение в DirectX SDK. Если вы не использовали его раньше, вы действительно пропускаете:)