I've implemented all the stuff for flipping horizontaly and verticaly, 
there is an attached example, but it's not very elegant, there is warning 
messages even if it works good, maybe there is a better way to do it?


Colet Patrice

----- Mail original -----
> De: "Patrice Colet" <[email protected]>
> À: "pd-list" <[email protected]>
> Cc: "Cyrille Henry" <[email protected]>
> Envoyé: Lundi 8 Avril 2013 16:37:29
> Objet: Re: [PD] flip image in glsl
> 
> Got it, thanks a lot!
> 
> Colet Patrice
> 
> ----- Mail original -----
> > De: "Cyrille Henry" <[email protected]>
> > À: "Patrice Colet" <[email protected]>
> > Cc: "pd-list" <[email protected]>
> > Envoyé: Lundi 8 Avril 2013 10:05:22
> > Objet: Re: [PD] flip image in glsl
> > 
> > hello,
> > 
> > when using rectangular texturing, coordinate goes from 0 to image
> > pixel size.
> > when using "rectangle 0" mode, pixel coordinate goes from 0 to 1.
> > (sometimes 1 is for the power of 2 bigger than the image pixel
> > size)
> > 
> > so, in rectangular mode, use pixetl_size - image coordinate to flip
> > the image.
> > and 1 - image coordinate in non rectangle mode.
> > 
> > Image can be fliped because the "fliped" flag is not used on the
> > shader.
> > 
> > cheers
> > c
> > 
> > 
> > 
> > Le 08/04/2013 09:24, Patrice Colet a écrit :
> > > Hello,
> > >
> > >   how is it possible to flip upside down an image in glsl example
> > >   05.multitexture
> > >
> > > I tried to implement this in fragment program:
> > >
> > > http://stackoverflow.com/questions/9857089/flip-upside-down-vertex-shader-gles
> > >
> > > but it doesn't work. The only thing I can do is changing texture
> > > scale and position, but I couldn't do it with negative values
> > > like it would be done in pix_coordinates.
> > >
> > > In fact when I use pix_multiimage before pix_texture, the image
> > > gets flipped, I don't know why...
> > >
> > > Colet Patrice
> > >
> > >
> > > _______________________________________________
> > > [email protected] mailing list
> > > UNSUBSCRIBE and account-management ->
> > > http://lists.puredata.info/listinfo/pd-list
> > >
> > 
> 
> _______________________________________________
> [email protected] mailing list
> UNSUBSCRIBE and account-management ->
> http://lists.puredata.info/listinfo/pd-list
> 
//jack/RYBN 2010
#extension GL_EXT_gpu_shader4 : enable
#extension GL_ARB_texture_rectangle : enable
uniform sampler2DRect Ttex1;
uniform sampler2DRect Ttex2;
uniform sampler2DRect Ttex3;
uniform sampler2DRect tex0;
uniform float style, target;
uniform float mix_factor, mix_color;
uniform float R, G, B, A;
uniform float FlipV1, FlipV2, FlipH1, FlipH2;


varying vec2 texcoord0;
ivec2 size1 = textureSize2DRect(Ttex1, 0);
ivec2 size2 = textureSize2DRect(Ttex2, 0);
ivec2 size3 = textureSize2DRect(Ttex3, 0);
ivec2 size0 = textureSize2DRect(tex0, 0);
vec2 texcoord1,texcoord2;
void main (void)
{
	
	float sizeF1X = float(size1.x)/float(size0.x);
	float sizeF1Y = float(size1.y)/float(size0.y);
	float sizeF2X = float(size2.x)/float(size0.x);
	float sizeF2Y = float(size2.y)/float(size0.y);
	float sizeF3X = float(size3.x)/float(size0.x);
	float sizeF3Y = float(size3.y)/float(size0.y);
	
	if (FlipV1 == 0.) {
		if (FlipH1 == 0.) {
			texcoord1 = vec2(texcoord0.s*sizeF1X, texcoord0.t*sizeF1Y);
		 } else if (FlipH1 == 1.) {
			texcoord1 =  vec2(float(size1.x) - texcoord0.s*sizeF1X, texcoord0.t*sizeF1Y);
		}
	} else if (FlipV1 == 1.) {
		if (FlipH1 == 0.) {
			texcoord1 =  vec2(texcoord0.s*sizeF1X,float(size1.y) - texcoord0.t*sizeF1Y);
		} else if (FlipH1 == 1.) {
			texcoord1 =  vec2(float(size1.x) - texcoord0.s*sizeF1X,float(size1.y) - texcoord0.t*sizeF1Y);
		}
	}
	if (FlipV2 == 0.) {
		if (FlipH2 == 0.) {
			texcoord2 =  vec2(texcoord0.s*sizeF2X,texcoord0.t*sizeF2Y);
		} else if (FlipH2 == 1.) {
			texcoord2 =  vec2(float(size2.x) - texcoord0.s*sizeF2X,texcoord0.t*sizeF2Y);
		}
	} else if (FlipV2 == 1.) {
		if (FlipH2 == 0.) {
			texcoord2 =  vec2(texcoord0.s*sizeF2X,float(size2.y) - texcoord0.t*sizeF2Y);
		} else if (FlipH2 == 1.) {
			texcoord2 =  vec2(float(size2.x) - texcoord0.s*sizeF2X,float(size2.y) - texcoord0.t*sizeF2Y);
		}
	}
	vec4 color1 = texture2DRect(Ttex1, texcoord1);
	vec4 color2 = texture2DRect(Ttex2, texcoord2);
	vec4 color3 = vec4(R, G, B, A);
	if (style == 0.) {
		if (target == 0.) {
			gl_FragColor = (color1 + color2);
		} else if (target == 1.) {
			gl_FragColor = (color1 + color3);
		}
	} else if (style == 1.) {
		if (target == 0.) {
			gl_FragColor = (color1 - color2);
		} else if (target == 1.) {
			gl_FragColor = (color1 - color3);
		}
	} else if (style == 2.) {
		if (target == 0.) {
			gl_FragColor = abs(color1 - color2);
		} else if (target == 1.) {
			gl_FragColor = abs(color1 - color3);
		}
	} else if (style == 3.) {
		if (target == 0.) {
			gl_FragColor = (color1 * color2);
		} else if (target == 1.) {
			gl_FragColor = (color1 * color3);
		}
	} else if (style == 4.) {
		gl_FragColor = mix(color1,color2,mix_factor);
	} else if (style == 5.) {
		gl_FragColor = mix(mix(color1,color2,mix_factor),color3,mix_color);
	}


}

//jack/RYBN 2010
varying vec2 texcoord0;

uniform float K1,K2,K3,K4;
void main()
{
	texcoord0 = (gl_TextureMatrix[0]*gl_MultiTexCoord0* vec4(K1,K2,0.,0.)+vec4(K3,K4,0.,0.) ).st;
	gl_Position = ftransform();

}
#N canvas 569 143 872 447 10;
#X obj 510 323 loadbang;
#X obj 367 384 pix_texture;
#X obj 367 349 pix_set;
#X obj 367 281 alpha;
#N canvas 732 403 536 550 glsl 0;
#X obj 136 32 inlet;
#X obj 172 400 inlet;
#X obj 136 469 outlet;
#X obj 136 443 glsl_program;
#X obj 199 255 pack 0 0;
#X obj 217 232 t b f;
#X obj 217 190 change;
#X msg 199 281 link \$1 \$2;
#X floatatom 217 213 2 0 0 0 ID - -;
#X floatatom 199 129 2 0 0 0 ID - -;
#X obj 204 305 print linking;
#X obj 353 29 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 136 84 glsl_vertex;
#X obj 136 170 glsl_fragment;
#N canvas 1 88 450 300 load_shader 0;
#X msg 116 126 0;
#X obj 89 154 outlet;
#X obj 89 71 gemhead 1;
#X obj 89 100 t b b;
#X connect 0 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 1 0;
#X connect 3 1 0 0;
#X restore 353 7 pd load_shader;
#X obj 199 106 change;
#N canvas 242 260 450 300 onebang 0;
#X obj 120 71 inlet;
#X obj 120 151 outlet;
#X obj 120 120 t b;
#X obj 120 100 change;
#X msg 161 71 set -1;
#X obj 161 11 gemhead;
#X obj 161 51 route 0;
#X obj 161 31 route gem_state;
#X connect 0 0 3 0;
#X connect 2 0 1 0;
#X connect 3 0 2 0;
#X connect 4 0 3 0;
#X connect 5 0 7 0;
#X connect 6 0 4 0;
#X connect 7 0 6 0;
#X restore 206 464 pd onebang;
#X msg 384 464 tex0 \$1;
#X obj 384 443 0;
#X msg 280 408 K1 1 \, K2 1 \, K3 0 \, K4 0 \, Ttex1 1 \, Ttex2 2;
#X msg 151 147 open GLSL_mix.frag;
#X msg 156 52 open GLSL_mix.vert;
#X connect 0 0 12 0;
#X connect 1 0 3 0;
#X connect 3 0 2 0;
#X connect 3 1 16 0;
#X connect 4 0 7 0;
#X connect 5 0 4 0;
#X connect 5 1 4 1;
#X connect 6 0 8 0;
#X connect 7 0 3 0;
#X connect 7 0 10 0;
#X connect 8 0 5 0;
#X connect 9 0 4 0;
#X connect 11 0 21 0;
#X connect 11 0 20 0;
#X connect 12 0 13 0;
#X connect 12 1 15 0;
#X connect 13 0 3 0;
#X connect 13 1 6 0;
#X connect 14 0 11 0;
#X connect 15 0 9 0;
#X connect 16 0 19 0;
#X connect 16 0 18 0;
#X connect 17 0 3 0;
#X connect 18 0 17 0;
#X connect 19 0 3 0;
#X connect 20 0 13 0;
#X connect 21 0 12 0;
#X restore 367 329 pd glsl;
#X obj 406 306 r \$0glslparams;
#X obj 367 403 rectangle 3 4;
#X obj 367 259 gemhead;
#X obj 369 196 pix_texture;
#X obj 369 125 pix_image;
#X obj 369 90 gemhead;
#X msg 386 176 rectangle 1 \, texunit 1 \, quality 1;
#X obj 386 154 loadbang;
#X obj 638 190 pix_texture;
#X obj 638 119 pix_image;
#X obj 638 84 gemhead;
#X obj 701 80 openpanel;
#X obj 701 62 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 655 148 loadbang;
#X msg 655 170 rectangle 1 \, texunit 2 \, quality 1;
#X msg 55 299 FlipH1 \$1;
#X obj 85 278 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X msg 120 300 FlipV1 \$1;
#X obj 118 277 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X obj 144 332 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X obj 177 331 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X msg 114 353 FlipH2 \$1;
#X msg 179 354 FlipV2 \$1;
#X obj 19 394 s \$0glslparams;
#N canvas 319 742 710 309 RGB 0;
#X obj 216 249 outlet;
#X msg 375 195 mix_color \$1;
#X obj 15 83 hsl 128 15 0 1 0 0 cadreColorM-\$1 cadreColorM-\$1-r empty
-2 -8 0 10 -1 -262144 -1 0 1;
#X obj 15 14 hsl 128 15 0 1 0 0 cadreColorR-\$1 cadreColorR-\$1-r empty
-2 -8 0 10 -258113 -1 -1 0 1;
#X obj 15 31 hsl 128 15 0 1 0 0 cadreColorG-\$1 cadreColorG-\$1-r empty
-2 -8 0 10 -4034 -1 -1 0 1;
#X obj 15 48 hsl 128 15 0 1 0 0 cadreColorB-\$1 cadreColorB-\$1-r empty
-2 -8 0 10 -4160 -1 -1 0 1;
#X obj 15 65 hsl 128 15 0 1 0 0 cadreColorA-\$1 cadreColorA-\$1-r empty
-2 -8 0 10 -262144 -1 -1 0 1;
#X msg 230 156 R \$1;
#X msg 267 156 G \$1;
#X msg 307 157 B \$1;
#X msg 342 173 A \$1;
#X text 152 63 A;
#X text 148 78 mix;
#X obj 28 214 inlet;
#X obj 149 14 cnv 15 15 50 empty \$0colorcnv empty 20 12 0 14 -196609
-262144 0;
#X obj 123 -47 r \$0databang;
#X obj -27 -57 r osc;
#X obj -27 -36 OSCroute /pixmix\$1;
#X obj -27 -15 OSCroute /R;
#X obj -78 15 OSCroute /G;
#X obj -93 45 OSCroute /B;
#X obj -92 72 OSCroute /A;
#X obj -114 98 OSCroute /mix_color;
#N canvas 1062 740 450 300 canevasColor 0;
#X obj 218 132 s \$0colorcnv;
#X msg 219 109 color \$1 0;
#X obj 294 7 * 255;
#X obj 254 7 * 255;
#X obj 205 8 * 255;
#N canvas 66 227 606 448 RGB_____________ 0;
#X obj 97 56 inlet;
#X obj 262 53 inlet;
#X obj 339 55 inlet;
#X obj 405 56 inlet;
#X obj 97 270 bang;
#X msg 77 295 0;
#X msg 104 295 1;
#X obj 146 268 bang;
#X msg 132 295 0;
#X msg 160 295 1;
#X obj 265 313 spigot;
#X obj 312 313 spigot;
#X obj 249 385 outlet;
#X text 93 33 select;
#X text 267 28 red;
#X text 337 30 green;
#X text 409 30 blue;
#X obj 405 102 t b f;
#X obj 339 160 +;
#X obj 339 185 t b f;
#X obj 339 216 +;
#X obj 296 385 outlet;
#X obj 28 180 loadbang;
#X obj 296 361 f;
#X obj 249 361 f;
#X obj 262 79 * -65536;
#X obj 339 80 * -256;
#X obj 405 80 * -1;
#X obj 339 247 - 1;
#X obj 97 135 route back label bang;
#X obj 235 168 t b b b;
#X connect 0 0 29 0;
#X connect 1 0 25 0;
#X connect 2 0 26 0;
#X connect 3 0 27 0;
#X connect 4 0 5 0;
#X connect 4 0 6 0;
#X connect 5 0 11 1;
#X connect 6 0 10 1;
#X connect 7 0 8 0;
#X connect 7 0 9 0;
#X connect 8 0 10 1;
#X connect 9 0 11 1;
#X connect 10 0 24 1;
#X connect 11 0 23 1;
#X connect 17 0 18 0;
#X connect 17 1 18 1;
#X connect 18 0 19 0;
#X connect 19 0 20 0;
#X connect 19 1 20 1;
#X connect 20 0 28 0;
#X connect 22 0 6 0;
#X connect 23 0 21 0;
#X connect 24 0 12 0;
#X connect 25 0 20 0;
#X connect 26 0 18 0;
#X connect 27 0 17 0;
#X connect 28 0 11 0;
#X connect 28 0 10 0;
#X connect 29 0 4 0;
#X connect 29 1 7 0;
#X connect 29 2 30 0;
#X connect 30 0 24 0;
#X connect 30 1 23 0;
#X connect 30 2 28 0;
#X restore 215 87 pd RGB_____________;
#X obj 211 54 t b a;
#X obj 263 56 t b a;
#X obj 305 53 t b a;
#X obj 206 27 i;
#X obj 253 28 i;
#X obj 294 29 i;
#X obj 205 -53 r cadreColorR-\$1;
#X obj 254 -31 r cadreColorG-\$1;
#X obj 295 -13 r cadreColorB-\$1;
#X connect 1 0 0 0;
#X connect 2 0 11 0;
#X connect 3 0 10 0;
#X connect 4 0 9 0;
#X connect 5 0 1 0;
#X connect 6 0 5 0;
#X connect 6 1 5 1;
#X connect 7 0 5 0;
#X connect 7 1 5 2;
#X connect 8 0 5 0;
#X connect 8 1 5 3;
#X connect 9 0 6 0;
#X connect 10 0 7 0;
#X connect 11 0 8 0;
#X connect 12 0 4 0;
#X connect 13 0 3 0;
#X connect 14 0 2 0;
#X restore 184 17 pd canevasColor;
#X obj 230 88 r cadreColorR-\$1;
#X obj 279 110 r cadreColorG-\$1;
#X obj 320 128 r cadreColorB-\$1;
#X obj 345 150 r cadreColorA-\$1;
#X obj 375 174 r cadreColorM-\$1;
#X connect 1 0 0 0;
#X connect 7 0 0 0;
#X connect 8 0 0 0;
#X connect 9 0 0 0;
#X connect 10 0 0 0;
#X connect 13 0 0 0;
#X connect 15 0 3 0;
#X connect 15 0 4 0;
#X connect 15 0 5 0;
#X connect 15 0 6 0;
#X connect 15 0 2 0;
#X connect 16 0 17 0;
#X connect 17 0 18 0;
#X connect 18 0 3 0;
#X connect 18 1 19 0;
#X connect 19 1 20 0;
#X connect 20 1 21 0;
#X connect 21 0 6 0;
#X connect 21 1 22 0;
#X connect 22 0 2 0;
#X connect 24 0 7 0;
#X connect 25 0 8 0;
#X connect 26 0 9 0;
#X connect 27 0 10 0;
#X connect 28 0 1 0;
#X coords 0 -1 1 1 160 90 1 10 10;
#X restore 19 178 pd RGB;
#N canvas 1184 579 450 435 mixmode 0;
#X obj 105 123 hradio 15 1 0 6 empty empty empty 0 -8 0 10 -262144
-1 -1 0;
#X msg 230 210 add;
#X msg 230 270 multiply;
#X msg 230 290 mix;
#X msg 230 250 diff;
#X msg 230 230 subtract;
#X msg 232 309 mix_color;
#X obj 105 176 route 0 1 2 3 4 5;
#X obj 106 104 hsl 90 15 0 5 0 0 empty empty multiply 2 8 0 10 -99865
-99865 -262144 0 1;
#X msg 26 297 label \$1;
#X obj 176 340 symbol;
#X obj 324 356 outlet;
#X obj 106 142 hsl 127 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 0 1;
#X msg 323 206 mix_factor \$1;
#X text 201 119 mix 1&2;
#X msg 297 174 style \$1;
#X obj 202 104 tgl 15 1 cadreTarget-\$1 cadreTarget-\$1-r target 17
7 0 10 -262144 -1 -1 0 1;
#X msg 334 244 target \$1;
#X obj 205 15 r \$0databang;
#X connect 0 0 7 0;
#X connect 0 0 15 0;
#X connect 1 0 10 0;
#X connect 2 0 10 0;
#X connect 3 0 10 0;
#X connect 4 0 10 0;
#X connect 5 0 10 0;
#X connect 6 0 10 0;
#X connect 7 0 1 0;
#X connect 7 1 5 0;
#X connect 7 2 4 0;
#X connect 7 3 2 0;
#X connect 7 4 3 0;
#X connect 7 5 6 0;
#X connect 8 0 0 0;
#X connect 9 0 8 0;
#X connect 10 0 9 0;
#X connect 12 0 13 0;
#X connect 13 0 11 0;
#X connect 15 0 11 0;
#X connect 16 0 17 0;
#X connect 17 0 11 0;
#X connect 18 0 0 0;
#X connect 18 0 12 0;
#X coords 0 -1 1 1 160 60 2 100 100;
#X restore 19 115 pd mixmode;
#X obj 37 39 gemwin;
#X msg 35 17 create \, 1;
#X msg 109 17 destroy;
#X msg 444 363 rectangle 1 \, texunit 0 \, quality 1;
#X msg 701 100 open \$1;
#X obj 428 80 openpanel;
#X obj 428 62 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X msg 428 100 open \$1;
#X connect 0 0 34 0;
#X connect 1 0 6 0;
#X connect 2 0 1 0;
#X connect 3 0 4 0;
#X connect 4 0 2 0;
#X connect 5 0 4 1;
#X connect 7 0 3 0;
#X connect 9 0 8 0;
#X connect 10 0 9 0;
#X connect 11 0 8 0;
#X connect 12 0 11 0;
#X connect 14 0 13 0;
#X connect 15 0 14 0;
#X connect 16 0 35 0;
#X connect 17 0 16 0;
#X connect 18 0 19 0;
#X connect 19 0 13 0;
#X connect 20 0 28 0;
#X connect 21 0 20 0;
#X connect 22 0 28 0;
#X connect 23 0 22 0;
#X connect 24 0 26 0;
#X connect 25 0 27 0;
#X connect 26 0 28 0;
#X connect 27 0 28 0;
#X connect 29 0 28 0;
#X connect 30 0 29 0;
#X connect 32 0 31 0;
#X connect 33 0 31 0;
#X connect 34 0 1 0;
#X connect 35 0 14 0;
#X connect 36 0 38 0;
#X connect 37 0 36 0;
#X connect 38 0 9 0;
_______________________________________________
[email protected] mailing list
UNSUBSCRIBE and account-management -> 
http://lists.puredata.info/listinfo/pd-list

Reply via email to