OpenGL Scissors and Glue


    Oct 10 2006 | 11:18 am
    Hi all,
    Am looking for a way to do the same thing as jit.scissors and jit.glue in openGL. I need to splice an image into three and process it using some slabs then join it back! sounds too easy eh?
    Any ideas? I had a quick look and am looking into number (3) of render contexts... not sure.
    Thanks in advance.
    Tim

    • Oct 10 2006 | 4:16 pm
      Use texture coordinate offset in your slab processing to just work on
      one section of the video. It's a lot like using srcdim and dstdim for
      jit.matrix. If the shader you want to use doesn't have a parameter
      for tex coord offsets, just add it.
      wes
      On 10/10/06, Timothy Devine wrote:
      >
      > Hi all,
      >
      > Am looking for a way to do the same thing as jit.scissors and jit.glue in openGL. I need to splice an image into three and process it using some slabs then join it back! sounds too easy eh?
      >
      > Any ideas? I had a quick look and am looking into number (3) of render contexts... not sure.
      >
      > Thanks in advance.
      >
      > Tim
      >
    • Oct 10 2006 | 10:49 pm
      Thanks Wes! That sounds like it is exactly what I need to do!
      Ok I started trying to cut and paste the text into a slab but i have no idea about GLSL so i made a patch with rota slabs into a fourway mix...
      it is essentially what i want to do... although it doesn't work... at the very least it is a visual map of how i think it should work...
      Any suggestions?
      max v2;
    • Oct 10 2006 | 11:44 pm
      Hi Timothy,
      Here's a start. There seem to be some multitexuring slab issues that
      I couldn't figure out. I'll look into them later. Anyway, here's a
      patch and a shader. To use the patch, load a video and start
      rendering, then enable which video stream should go to the
      concatentating shader with the router object. Notice how I don't have
      the 2nd texture hooked up. This is because for some reason it gets
      linked to the 3rd one *unless* you start things up and get it rolling
      and *then* hook it up. I have no idea why this is right now. Anyway,
      here's the patch and shader. THe shader is called td.glue.jxs. You
      may want to modify it to suit your purposes.
      wes
      ----------------------shader-----------------------
      Glue
    • Oct 11 2006 | 12:27 am
      Hi wes,
      Looks promising, cheers. Although i am having trouble with the shader.
      I saved it as td.glue.jxs
      and it didn't work so i added a couple of lines, in a kind of hack stlye GLSL i guess... didn't work... I have no idea about GLSL coding
      Cheers,
      Tim
      ------
      //texcoord1 = vec2(gl_TextureMatrix[1] * gl_MultiTexCoord1);
      //texcoord2 = vec2(gl_TextureMatrix[2] * gl_MultiTexCoord2);
      // extract the x and y scalars from the texture matrix to
      determine dimensions
      texdim0 = vec2 (abs(gl_TextureMatrix[0][0][0]),abs(gl_TextureMatrix[0][1][1]));
      //texdim1 = vec2
      (abs(gl_TextureMatrix[1][0][0]),abs(gl_TextureMatrix[1][1][1]));
      //texdim2 = vec2
      (abs(gl_TextureMatrix[2][0][0]),abs(gl_TextureMatrix[2][1][1]));
      }
      ]]>
      ------------------
      The error i get in the max window is
      • error: jit_xml_document: error reading file at byte offset 492 / not well-formed (invalid token)
      • error: line (27): >
      • error: jit.gl.shader: error reading shader xml file 'Gustav:/Applications/MaxMSP 4.6/Cycling '74/jitter-shaders/texdisplace/td.glue.jxs'
    • Oct 11 2006 | 2:05 am
    • Oct 11 2006 | 2:23 am
      Sorry Wes,
      Hmm... Still not sure that it is right
      • error: jit_xml_document: error reading file at byte offset 7 / syntax error
      • error: line (6): Glue
      • error: jit.gl.shader: error reading shader xml file 'Gustav:/Applications/MaxMSP 4.6/Cycling '74/jitter-shaders/texdisplace/td.glue.jxs'
      This is what i get... in Firefox, Safari and Mail emails...
    • Oct 11 2006 | 2:35 am
      Ha! I didn't get an attachment BUT I recovered it from the source... how strange... I had to find and delete all the
      and it works...
      Great!
      Now...
      I will have a play and see what i can do... Thanks! Wes
      tim
    • Oct 11 2006 | 2:41 am
      Another way which might be faster depending on your hardware is to
      render the 3 split textures to 3 aligned videoplanes and render those
      to a texture which you then feedback into the slab.
      wes
      On 10/10/06, Timothy Devine wrote:
      >
      > Ha! I didn't get an attachment BUT I recovered it from the source... how strange... I had to find and delete all the
      and it works...
      >
      > Great!
      >
      > Now...
      >
      > I will have a play and see what i can do... Thanks! Wes
      >
      > tim
      >
    • Oct 11 2006 | 2:44 am
      yeah I was thinking about that but have had trouble in the past having multiple videoplanes... I think hardware is not an issue...
      I have an new iMac intel duo with 2gb ram and 128 graphics...
      tim
    • Oct 11 2006 | 3:47 am
      yeah... hardware is an issue... three video planes slows it right down...
      the td.glue.jxs is very close to what i need to do i think the only thing is that when I move each plane into their thirds they black eachother out... if only they were layered ontop of eachother (depth) 1, 2 and 3 then it might be possible to move them to a position where it might work...
      thanks for all your help wes it has been much apprecieated, if you're ever in melbourne i owe you a beer.
    • Oct 11 2006 | 4:12 am
      > thanks for all your help wes it has been much apprecieated, if you're ever in melbourne i owe you a beer.
      Cool. I'm still a little fizzy as to exactly what you're trying to
      do. Here's what I think you're trying to do:
      -take a video image
      -segment it into 3 parts
      -feed 1 of the parts back on itself.
      I noticed that when you offset the sections, they feed into each other
      potentially making the thing blowup (i.e. turn all
      white/black/whatever). You can get around this by setting the alpha
      channel in the td.glue.jxs shader appropriately. For instance, if you
      want to feedback the middle section and the left section is feeding
      into it, you may want to do some kind of cross fade with the straight
      video so that the feedback isn't instantaneous. This will require
      getting into GLSL a bit. Honestly though, it's not very hard. Start
      with one of the example co.*.jxs shaders. Those are pretty simple and
      are pixel shaders (which is what you want to process video with). If
      you need help, the GLSL Orange book is the default reference although
      I'm personally not too keen on it. If you really want to understand
      GLSL, this is the document you need:
      Give it a whirl. Here's a little example
      //get the color of the pixel (fragment)
      vec4 final = texture2DRect(tex0, texcoord0);
      //set the alpha channel to pass if green (luma) is above a threshold
      final.a = final.g*float(final.g > thresh);
      This second line will look at the green value of the pixel and if it's
      above the 'thresh' value, it will pass it. This is exactly the same
      as jit.op operation '>p'. I think you'll find alot of flexibility
      here and will be able to make your patches faster and more specific to
      your needs. The shaders provided with Jitter are great and many, but
      I almost never use them straight-up. They need little tweaks here and
      there to be perfect. Give it a whirl, it should only take a day or so
      of determined work to make decent headway into this stuff. Feel free
      to ask any questions and good luck.
      wes