2017-05-02 2 views
1

Ich versuche, eine Textur zu rendern, die durch einen Pixel-Shader geleitet wird.Übergeben von Textur durch Shader DirectX 9

Derzeit mein Shader ist wie folgt:

float4 EffectProcess(float2 Tex : TEXCOORD0) : COLOR0 
{ 
    return float4(1,0,0,1); 
} 

technique MyTechnique 
{ 
    pass p0 
    { 
     VertexShader = null; 
     PixelShader = compile ps_2_0 EffectProcess(); 
    } 
} 

Wie Sie sehen können, ist es eine sehr grundlegende Shader, der macht, dass die Pixel zwingt rot.

UINT uiPasses = 0; 
     res= g_lpEffect->Begin(&uiPasses, 0); 
     for (UINT uiPass = 0; uiPass < uiPasses; uiPass++) 
     { 
      res = g_lpEffect->BeginPass(uiPass); 
      res = sprite->Begin(D3DXSPRITE_SORT_TEXTURE); 
      res = sprite->Draw(tex, NULL, 0x0, 0x0, 0xFFFFFFFF); 
      res = sprite->End(); 
      res = g_lpEffect->EndPass(); 
     } 
     res = g_lpEffect->End(); 

Und Ich zeichne die Textur mit dem Shader wie so. Ich bin mir nicht sicher, ob dies der richtige Weg ist und habe sehr wenig Ressourcen zu diesem Thema gefunden.

Der Shader wird korrekt erstellt und auch die Textur, alle Aufrufe geben ein Ergebnis von S_OK zurück, aber wenn ich den Code ausführe, wird die Textur perfekt angezeigt, ohne von Rot überschrieben zu werden.

Antwort

1

Sowohl Sprite als auch Effekte speichern standardmäßig den ursprünglichen Pipelinestatus und richten ihre eigenen ein, wenn Begin aufgerufen wird, und stellen sie dann wieder her, wenn End aufgerufen wird. Ich vermute also, dass sprite->Begin(D3DXSPRITE_SORT_TEXTURE); die Effektverarbeitung deaktiviert und Ihr Pixelshader nie aufgerufen wird. Sie können versuchen, etwas wie D3DXSPRITE_DONOTMODIFY_RENDERSTATE in Begin zu übergeben, um zu verhindern, dass der Pipeline-Status geändert wird, obwohl dies das Rendern von Sprites beeinträchtigen kann. Es wäre besser, Sprite ganz loszuwerden und einen eigenen Sprite-Shader (sowohl Vertex als auch Pixel) zu schreiben, da das Fixed-Pipeline-Rendering heutzutage größtenteils veraltet ist.

+0

Ich habe meinen eigenen Sprite Shader erstellt, um das zu tun, was ich machen wollte. –