Hi everybody,
I have found a possible bug in OSG. But maybe I am using OSG wrong.
Hopefully someone can help me finding a solution.
Here's the case:
I want to use OSG for 3D rendering a model that I use in my own software
programm. To "embed" the OSG window in my program, I want to put it on top of
the page that normally shows the 3D-model.
When I'm not displaying the page, I want to stop/pause the rendering task and
put the window outside my screen (pos -1000, -1000 or something).
At first, I tried it with
Code:
Viewer->stopThreading();
Viewer->setUpViewInWindow(-1000, -1000, 640, 480);
Viewer->startThreading();
to remove the window and
Code:
Viewer->stopThreading();
Viewer->setUpViewInWindow(x,y,width,height);
Viewer->startThreading();
to show the window again.
Somewhere else in my code I have a if-condition that checks if I need to render
new pages.
Code:
if(page_visible)
{
viewer->frame();
}
This is working fine and actually was really suprised how quick it was. Kudo's
to OSG!
But now I want the same window, but without the windows decoration. Because
when I use it on top of my own software, I want it it to have it look it's
embedded in the programm. This means that it has no windows-boarders around the
osg-window. Also the minimize, restore and close buttons on the right top
corner are gone too.
I found out this could be done with traits. But when I replace
setUpViewInWindow with traits I doesn't work like I expected.
At first, the viewer comes, but without keyboard input. (This used to work with
setUpViewInWindow).
But then when I call makeViewerInvisible, the window leaves the screen-area. So
that is fine.
Then I call makeViewerVisible, and then the window doesn't show up.
When I add a breakpoint at the start of makeViewerInvisible, the window appear
in a flash, to disappear again.
I hope you guys can reproduce this bug. (If it is a bug of course...)
Here's the code:
Code:
//at init
//please not, this is now a standalone project to test if it works, so at init,
I make the viewer visible.
void interfaceOSG::init_viewer(osgViewer::Viewer* Viewer, int x, int y, int
width, int height)
{
scene = osgDB::readNodeFile("d:/OpenSceneGraph-Data/cessna.osg");
Viewer->setCameraManipulator(new osgGA::TrackballManipulator());
Viewer->setSceneData(scene);
/*Viewer->setUpViewInWindow(x, y, width, height);*/
traits->x = x; //in screen space
traits->y = y; //in screen space
traits->width = width;
traits->height = height;
traits_das->windowDecoration = false; // Removes the window's border
osg::ref_ptr<osg::GraphicsContext> graphicsContext =
osg::GraphicsContext::createGraphicsContext(traits_das.get());
viewer->getCamera()->setGraphicsContext(graphicsContext);
viewer->getCamera()->setViewport(new osg::Viewport(0, 0, 640, 480));
Viewer->addEventHandler(new KeyboardEventHandler());
}
void interfaceOSG::makeViewerVisible(osgViewer::Viewer* Viewer, int x, int y,
int width, int height)
{
Viewer->stopThreading();
traits->x = x;
traits->y = y;
traits->width = width;
traits->height = height;
traits->windowDecoration = false; // Removes the window's border
osg::ref_ptr<osg::GraphicsContext> graphicsContext =
osg::GraphicsContext::createGraphicsContext(traits_das.get());
viewer->getCamera()->setGraphicsContext(graphicsContext);
viewer->getCamera()->setViewport(new osg::Viewport(0, 0, 640, 480));
Viewer->startThreading();
}
void interfaceOSG::makeViewerInvisible(osgViewer::Viewer* Viewer)
{
Viewer->stopThreading();
//Viewer->setUpViewInWindow(-1000, -1000, 640, 480);
traits->x = -1000;
traits->y = -1000;
traits->width = 640;
traits->height = 480;
traits->windowDecoration = false; // Removes the window's border
osg::ref_ptr<osg::GraphicsContext> graphicsContext =
osg::GraphicsContext::createGraphicsContext(traits_das.get());
viewer->getCamera()->setGraphicsContext(graphicsContext);
viewer->getCamera()->setViewport(new osg::Viewport(0, 0, 640, 480));
Viewer->startThreading();
}
If I wasn't clear enought about something, please do not hesitate to ask me
more info. I'll gladly try to explain it further. :)
I hope you guys can help me. If I can't make this work, OSG will sadly be a big
showstopper for my program... :|
Thank you!
Cheers,
Marco
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=59570#59570
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org