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