[résolu] Pixel shader sur surface

Bonjour à tous,

je reviens vers vous avec des soucis de pixel shader;
mon idée est de pouvoir traiter une Surface par un simple pixel shader (ici par exemple ne conserver que la composante rouge de la surface), le tout en c#/mdx1.1 (pas encore envie de passer à xna, seulement quand j’aurais un truc qui me convienne, et pour l’instant je fais tout ce que je veux avec cet environnement).

Mon idée est la suivante (et je ne sais même pas si c’est faisable, notez).

Le code du shader, simple, voire minimaliste (trop ?):

[code]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.g = 0;
Color.b = 0;

return Color;

}

technique RedPostProcess
{
pass p0
{
VertexShader = null;
PixelShader = compile ps_2_0 RedExtractionShader();
}

}[/code]

Mon code d’appel au shader:

[code]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);

// j’initialisie ici ma surface à pixelshaderiser, venant de mon backbuffer
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();

// Mon image sauvée sur disque est la même qu’affichée en entrée …
TextureLoader.Save(“h:\test.bmp”, ImageFileFormat.Bmp, mWorkingTexture);[/code]

Quelqu’un aurait-il un idée ?
J’ai googlé pas mal, sans trouver comment faire ce genre de trucs …

Merci , alt3.

Bah théoriquement ça doit marcher (minus problème de render state), mais pour le coup ça serai peut-être plus simple de le faire sur le CPU nan (vu que là tu sauvegarde une image, si c’est pour servir à autre chose ensuite, j’ai rien dit)?

Problème de renderstate gniiiite ?

Effectivement, c’est pour faire quelque chose ensuite (mélange de surface, toussa).

Euh ouais quand je parle problème de render state j’entend plutôt qu’il y ai une couille ailleur dans le prog, bon ok oublie c’est pas important B)

Hop, problème réglé B)

Merci à tout les participants, la solution est ici pour les curieux.

Voici un screenshot, avec juste une inversion de couleur, pour tests quoi:

Y’a plus que 2 pages de topics dans ce forum ? oO

[quote=“alt3, post:6, topic: 34878”]Y’a plus que 2 pages de topics dans ce forum ? oO[/quote]En bas de la page tu peux choisir d’afficher les posts plus vieux que 90 jours, là tu auras plus de pages.