bonsoir à tous,

J'ai un petit souci sur un appel de pixel shader sur une surface, ou texture, pour faire un rendu, et modification de rendu, offscreen, en c#.

J'ai tout un pipeline qui fonctionne, et qui me génère une image, dans une Surface, et qui fonctionne bien.

Maintenant, j'aimerais passer cette surface dans un pixel shader, sans succès, avec le code suivant:
(la surface "source" est mBackbufferColor).

Le code du pixel shader (qui se contente normalement de conserver une composante rouge par pixel):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
texture g_workingTexture;
 
sampler g_2DSrc = sampler_state
{
	Texture = <g_workingTexture>;
};
 
float4 RedExtractionShader( float2 Tex : TEXCOORD0 ) : COLOR0
{
    float4 Color;
 
    Color = tex2D( g_2DSrc, Tex.xy);
	Color.r = Color.r*2;
	Color.g = 0;
	Color.b = 0;
 
    return Color;
}
 
technique RedPostProcess
{
    pass p0
    {
        VertexShader = null;
        PixelShader = compile ps_2_0 RedExtractionShader();
    }
 
}
Ca passe sans probleme sous FX Composer.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
 
Texture mWorkingTexture;
Surface mWorkingSurface;
SurfaceDescription lSDC = mBackbufferColor.Description;
mWorkingTexture = new Texture(mDevice, lSDC.Width, lSDC.Height, 0, Usage.None, lSDC.Format, Pool.Managed);
 
mWorkingSurface = mWorkingTexture.GetSurfaceLevel(0);
SurfaceLoader.FromSurface(mWorkingSurface, mBackbufferColor, Filter.None, 0);
 
mDOF.SetValue("g_workingTexture", mWorkingTexture);
mDOF.Technique = "RedPostProcess";
numpasses = mDOF.Begin(0);
 
for (int lPasse = 0; lPasse < numpasses; lPasse++)
{
   mDOF.BeginPass(lPasse);
   mDevice.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);
   mDOF.EndPass();
}
 
mDOF.End();
TextureLoader.Save("h:\\test" + lNumberOfFrame.ToString() + ".bmp", ImageFileFormat.Bmp, mWorkingTexture);
Et là, je vois bien dans mes bmps de sortie que l'image est inchangée...

Quelqu'un voit-il la méga bourde que je fais ?

Merci et @+, alt3.