[PD] flip image in glsl

Jack jack at rybn.org
Wed Apr 10 17:13:07 CEST 2013

Le 10/04/2013 07:48, Patrice Colet a écrit :
> Hi Jack,
>  the fragment code is now very short and much more elegant, certainly faster than using conditions, I guess this is due to [pix_info] that is computing dimensions of the resulting texture.
>  This procedure seems to work for horizontal flipping then corrects strange behavior between pix_image and glsl,
> but vertical flipping has no consequence.
>  It's also possible to crop using the dimen parameter, but I believe there is a zoom parameter missing to do it entirely.
> So I'm going to restart coding a fragment code from the basis you propose that would allow to crop both textures, because this looks fundamental for my possible use of this object, that is mainly about mixing two textures which coordinates could be modulated to fit a particular context, where textures would need to be placed accurately without having to modify it in an image editor, maybe you have an idea about how to do it simply?
>> You can do operations directly on vec2 instead of two floats in your
>> fragment shader.
>> You can also avoid condition (could be slow).
>> See patch and glsl vertex and fragment attached for flip.
>> ++
>> Jack
>> _______________________________________________
>> Pd-list at iem.at mailing list
>> UNSUBSCRIBE and account-management ->open
>> http://lists.puredata.info/listinfo/pd-list
Hello Patrice,

Not sure to understand what you mean about the problem on
horizontal/vertical flipping.
Here a new patch and the fragment shader. This time, all is computed
from the Gem window size.
You can flip, scale and move each texture. (the flip is done from the
center position of the Gemwin).
In this patch, i use a workaround to avoid to see the 'border' of the
texture thanks to the message [perspec( on [gemframebuffer]. I don't
know if there is a better solution ?
Hope it will help.


PS : I can clean the this patch and keep only the part about position
and scale of a texture with GLSL for Gem example if it is interesting ?
-------------- next part --------------
//jack/RYBN 2013
#extension GL_EXT_gpu_shader4 : enable
#extension GL_ARB_texture_rectangle : enable

uniform sampler2DRect Ttex1;
uniform sampler2DRect Ttex2;
uniform sampler2DRect tex0;
uniform float style;
uniform float mix_factor;
uniform vec2 flip1, flip2;
uniform vec2 dimen, resize1, resize2, move1, move2;

ivec2 size1 = textureSize2DRect(Ttex1, 0);
ivec2 size2 = textureSize2DRect(Ttex2, 0);

void main (void)
	vec2 sizeF1 = vec2(size1)*(1.0/resize1);
	vec2 sizeF2 = vec2(size2)*(1.0/resize2);
	vec4 color1 = texture2DRect(Ttex1, abs(flip1-vec2(gl_FragCoord)/dimen)*sizeF1-move1/resize1);
	vec4 color2 = texture2DRect(Ttex2, abs(flip2-vec2(gl_FragCoord)/dimen)*sizeF2-move2/resize2);

	if (style == 0.) {
		gl_FragColor = (color1 + color2);
	} else if (style == 1.) {
		gl_FragColor = (color1 - color2);
	} else if (style == 2.) {
		gl_FragColor = abs(color1 - color2);
	} else if (style == 3.) {
		gl_FragColor = (color1 * color2);
	} else if (style == 4.) {
		gl_FragColor = mix(color1,color2,mix_factor);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: 06.rectangle_multitexture_flip_size.pd
Type: application/puredata
Size: 6703 bytes
Desc: not available
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20130410/0be45587/attachment.bin>

More information about the Pd-list mailing list