So far, the kludge solution is almost working.  I needed to add

    glPixelStorei(GL_PACK_ALIGNMENT, 1);

before glReadPixels() otherwise it broke if the window width wasn't a multiple 
of 8.

Problems remaining:

1. the aspect ratio does not adjust properly on window size changes, so that 
the scene just stretches like rubber.

2. there is a truly horrendous amount of copying data.

For (1), I was assuming that 

    camera->setViewport(new osg::Viewport(0,0,width,height));
    camera->setProjectionMatrixAsPerspective(30.0f, 1.*width/height, 1.0f, 
10000.0f);

on the slave and main (?) cameras would fix that up, but no.  Maybe there's 
something cached somewhere, even though I am completely reconstructing the 
slave camera on each resize.

Any suggestions where to look?

For (2), after the hardware renders the scene, and the PBO is mapped back into 
userspace RAM, the following copies occur:

- memcpy to the osg::Image data
- image->flipVertical()  since 2D library has Y inverted w.r.t GL.
- copy to a new Python string object
- copy to a new GdkPixbuf object
- copy to the cairo context (that's the Gtk 2D graphics engine).

I think a lot of this could be eliminated by creating the GdkPixbuf directly 
from the PBO map, flipping the row order in this copy.  Although it performs 
OK, we have to run on low-end systems.

Cheers,
Steve

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=73985#73985





_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to