Vanessam a écrit:casimir je n'arrive pas a faire marcher les pixel shader avec ta version j'ai loupé quelque chose ?
Sous kmplayer pas de probleme.
Quelques extraits d'un tuto que j'ai commencé à rédiger :
Direction options (bouton droit ou taper la lettre o), et section Ouput.
Choisir VMR9 renderless, "use textures surfaces and render video in 3D" et la méthode de resize bicubic dans le menu déroulant se trouvant après resizer. Il y a 3 choix : bicubic -0.6 -0.75 et –1. Le paramètre renforçant davantage les contours étant le -0.6. Enfin, cochez VMR9 mixer mode.
Chargez une vidéo, bouton droit dans la vidéo et vérifiez que le menu " shaders" est accessible et non grisé. Si c’est le cas, direction « edit ».
Dans la première boîte en haut à gauche, indiquez le nom du filtre créé : exemple "EdgeSharpen" et appuyez sur ENTER sinon il ne sera pas mémorisé. Sélectionnez ps_2_0 dans le second menu déroulant.
Enfin, dans la zone de texte se trouvant plus bas (là où il y a 001 en gris foncé) , collez le code suivant :
sampler s0 : register(s0);
float4 p0 : register(c0);
float4 p1 : register(c1);
#define width (p0[0])
#define height (p0[1])
#define counter (p0[2])
#define clock (p0[3])
#define one_over_width (p1[0])
#define one_over_height (p1[1])
#define PI acos(-1)
#define NbPixel 1
#define Edge_threshold 0.2
#define Sharpen_val0 2.0
#define Sharpen_val1 0.125
float4 main(float2 tex : TEXCOORD0) : COLOR
{
// taille de NbPixel pixels
float dx = NbPixel/width;
float dy = NbPixel/height;
float4 Res = 0;
// Détection de contour par Prewitt
// récuppération des 9 points
// [ 1, 2, 3 ]
// [ 4, 0, 5 ]
// [ 6, 7, 8 ]
float4 c0 = tex2D(s0, tex);
float4 c1 = tex2D(s0, tex + float2(-dx,-dy));
float4 c2 = tex2D(s0, tex + float2(0,-dy));
float4 c3 = tex2D(s0, tex + float2(dx,-dy));
float4 c4 = tex2D(s0, tex + float2(-dx,0));
float4 c5 = tex2D(s0, tex + float2(dx,0));
float4 c6 = tex2D(s0, tex + float2(-dx,dy));
float4 c7 = tex2D(s0, tex + float2(0,dy));
float4 c8 = tex2D(s0, tex + float2(dx,dy));
// Calcul des 3 vecteurs dérivé (hor,vert, diag1, diag2)
float4 delta1 = (c6+c4+c1-c3-c5-c8);
float4 delta2 = (c4+c1+c2-c5-c8-c7);
float4 delta3 = (c1+c2+c3-c8-c7-c6);
float4 delta4 = (c2+c3+c5-c7-c6-c4);
// calcul du Prewitt
float value = length(abs(delta1) + abs(delta2) + abs(delta3) + abs(delta4))/6;
// Si c'est un contour (vector lenght > Edge_threshold) => filtre de sharpen
if(value > Edge_threshold )
{
Res = c0 * Sharpen_val0 - (c1 + c2 + c3 + c4 + c5 + c6 + c7 + c8 ) * Sharpen_val1 ;
// Pour voir les contour en rouge ...
//Res = float4( 1.0, 0.0, 0.0, 0.0 );
return Res;
}
else
return c0;
}
Vérifiez que « D3DXCompileShader succeeded » est bien indiqué.
Lancez une vidéo puis bouton droit pour faire apparaître le menu contextuel, shaders et sélectionnez EdgeSharpen si vous l’avez nommé ainsi.