[osg-users] OSG in Gtk3 GLArea

Steve Hardy osgforum at tevs.eu
Tue Jun 5 19:42:19 PDT 2018

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.


Read this topic online here:

More information about the osg-users mailing list