Problems rendering GL to a matrix


    Oct 20 2008 | 4:04 am
    I have several patches which render a GL context to a jit.window with great results. I wanted to change the output of one of my patchers to a jit.matrix (mainly so I can jit.qt.record it). I am running into problems, error messages thrown like the following:
    jit.gl.texture: setting texture wrap mode t: GL Error: Invalid enumeration
    jit.gl.readback: unable to create framebuffer: pbuffers not supported!!
    jit.gl.shader: graphics hardware is not capable of running CG vertex programs.
    jit.gl.shader: graphics hardware is not capable of running CG fragment programs.
    jit.gl.shader: CG not supported for current hardware config.
    jit.gl.shader: unable to load program!
    jit.gl.shader: unable to find usable language implementation.
    jit.gl.shader: error loading shader!
    jit.gl: invalid extension called
    I know that the messages about graphics hardware are not accurate because the exact same patch on the exact same hardware rendering to a jit.window (or jit.pwindow) instead of a jit.matrix works flawlessly.
    I have boiled this down to a much simpler patch to demonstrate what I'm seeing. Any help would be appreciated.
    I also found that you can crash Max if you delete the jit.window object while rendering.
    Thanks,
    James

    • Oct 20 2008 | 4:49 am
      Hi,
      Thanks for the patch. I can reproduce and will look into it.
      wes
    • Oct 31 2008 | 9:48 pm
      After poking around in the examples, I found another way to tee the render output.
      examples/jitter-examples/render/render/jit.gl.render-tomatrix.maxpat shows 3 methods, including the most recommended method of using a jit.gl.sketch on the same context and hooking it up to dump its pixels to another context by sending it a glreadpixels message.
      I built this into my patch, but the cost of banging the jit.gl.sketch seems to be quite high.
      Normally, my patch gets about 35 FPS, but banging a jit.gl.sketch which glreadpixels to a 320x240 matrix knocks it back to around 25 FPS. If I make the matrix 720x480, then I only get 11-12 FPS. I can jit.qt.record that matrix at around that rate by recording to a RAM disk (if I record to a file on a hard drive, the frame rate goes even lower - 8-9 FPS).
      Is there a cheaper way to do this?
      My goal is to get to DV output (720x480 @ 29.97 FPS) but it seems like HD should be attainable as well in this modern age.
      Any tips?
      Thanks,
      James
    • Nov 01 2008 | 10:45 am
      There was a similar question recently and I posted a patch using
      jit.gl.asyncread.
      pelado
      On Fri, Oct 31, 2008 at 10:48 PM, James Drage wrote:
      >
      > After poking around in the examples, I found another way to tee the render
      > output.
      >
      > examples/jitter-examples/render/render/jit.gl.render-tomatrix.maxpat shows
      > 3 methods, including the most recommended method of using a jit.gl.sketch on
      > the same context and hooking it up to dump its pixels to another context by
      > sending it a glreadpixels message.
      >
      > I built this into my patch, but the cost of banging the jit.gl.sketch seems
      > to be quite high.
      >
      > Normally, my patch gets about 35 FPS, but banging a jit.gl.sketch which
      > glreadpixels to a 320x240 matrix knocks it back to around 25 FPS. If I make
      > the matrix 720x480, then I only get 11-12 FPS. I can jit.qt.record that
      > matrix at around that rate by recording to a RAM disk (if I record to a file
      > on a hard drive, the frame rate goes even lower - 8-9 FPS).
      >
      > Is there a cheaper way to do this?
      >
      > My goal is to get to DV output (720x480 @ 29.97 FPS) but it seems like HD
      > should be attainable as well in this modern age.
      >
      > Any tips?
      >
      > Thanks,
      > James
      >
    • Nov 02 2008 | 9:08 pm
      Thanks for the response Pelado. I tried the patch at the bottom of the thread on your link, and I get a little over 3 fps.
      I also tried integrating the jit.gl.asyncread method into my patcher, and I get similar results, around 3 fps with a 720x480 matrix. If I do a 320x240 matrix it comes out around 11 fps. So this is even slower than using the jit.gl.sketch method.
      Did some debugging here, and as soon as I send "automatic 1" to the jit.gl.asyncread, the frame rate drops through the floor. I get 35 fps with "automatic 0" (of course, I don't get anything in the matrix). So it seems that the bottleneck is indeed pulling the read to the matrix.
      It seems like that should be a lot higher. Any idea why it's so slow?
      Thanks,
      James
    • Nov 02 2008 | 9:15 pm
      Objects like jit.gl.asyncread depend greatly on your GPU. What do you have?
      wes
    • Nov 03 2008 | 3:38 am
      It's an HIS Radeon X1550. Driver version 8.421.0.0.
      I've got another machine with an eVGA GeForce 6200 LE in it. I'll try the same patch and see what kind of results I get.
      James
    • Nov 03 2008 | 3:49 am
      Well sheesh. I get close to 30 fps even recording 720x480 to the hard drive with the NVidia-based card. That's much more palatable!
      Thanks for the quick response!
      James
    • Nov 03 2008 | 3:52 am
      Can you post a basic patch? I have a machine with an x1600 I can test with.
      wes
      On Sun, Nov 2, 2008 at 8:38 PM, James Drage wrote:
      >
      > It's an HIS Radeon X1550. Driver version 8.421.0.0.
      >
      > I've got another machine with an eVGA GeForce 6200 LE in it. I'll try the same patch and see what kind of results I get.
      >
      > James
      >