2017-05-02 3 views
1

J'essaye de rendre une texture qui passe à travers un pixel shader.Passage de texture à travers Shader DirectX 9

Actuellement, mon shaders est la suivante:

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

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

Comme vous pouvez le voir, il est un shader très basique qui fait que les pixels oblige à être rouge.

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(); 

Et je dessine la texture en utilisant le shader comme ça. Je ne suis pas sûr que ce soit la bonne façon de le faire et j'ai trouvé très peu de ressources sur le sujet. Le shader est créé correctement et la texture ainsi, tous les appels retournent un résultat de S_OK, mais quand je cours le code, la texture montre parfaitement, sans être écrasée par le rouge.

Répondre

1

Le sprite et les effets stockent par défaut l'état initial du pipeline et configurent le leur lorsque Begin est appelé, puis le restaurent lorsque End est appelé. Donc, je soupçonne que sprite->Begin(D3DXSPRITE_SORT_TEXTURE); va désactiver le traitement des effets et votre pixel shader n'est jamais appelé. Vous pouvez essayer de passer quelque chose comme D3DXSPRITE_DONOTMODIFY_RENDERSTATE dans Begin pour l'empêcher de modifier l'état du pipeline, bien que cela puisse briser le rendu du sprite. Il vaudrait mieux se débarrasser complètement de l'image-objet et écrire votre propre shader d'image-objet (à la fois vertex et pixel) car le rendu de pipeline fixe est la plupart du temps obsolète.

+0

J'ai fini par créer mon propre sprite shader pour faire ce que je voulais faire. –