Hi Joshua,

I don't know CAVElib personally so can't answer specifics about
integration with it.

A couple of general comments though:

  1) Is the CAVElib creating multiple graphics contexts?  If so there you'll
      need a GraphicsWindow on the OSG per context you can't reuse the
      same window per context.

 2) Do you really need to use CAVElib?  The OSG itself can render
     to a cave just by setting up the Viewer slave Camera appropriately.
     There is also integration with other 3rd party VR libs.

Robert.

On 9 November 2011 20:53, Joshua Cook <[email protected]> wrote:
> So, comes the hard part of my asignment.  I'm now tasked with taking the 
> wonderful viewer that I've written using OSG and making it play nice with 
> CAVElib.  Well, CAVElib does not like to play nice.  It must own the OpenGL 
> context and controll everything except the drawing of the objects.  Well, the 
> only way I could see to do this was use a GraphicsWindowEmbeded.  Now, if I 
> just run CAVElib in the background, so to speak, I can see the example .iv 
> file perfectly.  However, there is a constant barage of warnings that an 
> OpenGL error has been detected starting with Warning: detected OpenGL error 
> 'invalid operation' at Before Renderer::compile, once for each pipe, and then 
> a constant stream of Warning: detected OpenGL error 'invalid operation' at 
> after RenderBin::draw(..).  If I let CAVElib determine my view frustrum and 
> look at matrix I get a screen of garbage because both frustrum and view 
> matrixes are identity matrixes which I attribute to the OpenGL issues.
>
> the simple code I'm running to show a .iv file is as follows
>
>
> Code:
>
> osg::Node* node = NULL;
> osg::PositionAttitudeTransform* pat = NULL;
> std::vector<osgViewer::Viewer*> viewVec;
> OpenThreads::Mutex m;
> osg::GraphicsContext* gc = NULL;
>
>  void init()
> {
>  osgViewer::Viewer* viewer = NULL;
>  {
>    OpenThreads::ScopedLock<OpenThreads::Mutex> lock(m);
>    viewer = new osgViewer::Viewer();
>    viewer->setReleaseContextAtEndOfFrameHint(false);
>    osg::ref_ptr<osgViewer::GraphicsWindowEmbedded> gw = 
> viewer->setUpViewerAsEmbeddedInWindow(100, 100, 500, 500);
>    viewer->getCamera()->setGraphicsContext(gw);
>    viewer->setSceneData(pat);
>    viewer->setThreadingModel(osgViewer::Viewer::SingleThreaded);
>    viewer->setCameraManipulator(new osgGA::TrackballManipulator);
>    viewer->setThreadSafeRefUnref(true);
>    viewer->realize();
>    viewVec.push_back(viewer);
>  }
>
>  CAVEDisplayBarrier();
>
> }
>
> void display()
> {
>  //GLenum errorNo;
>
>  //glPushAttrib(GL_ALL_ATTRIB_BITS);
>  //glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS);
>  //glShadeModel(GL_SMOOTH);
>
>  //glMatrixMode(GL_TEXTURE);
>  //glPushMatrix();
>  //glLoadIdentity();
>  //glMatrixMode(GL_PROJECTION);
>  //glPushMatrix();
>  //glLoadIdentity();
>  //glMatrixMode(GL_MODELVIEW);
>  //glPushMatrix();
>  //glLoadIdentity();
>
>  int num = CAVEPipeNumber();
>  osgViewer::Viewer* viewer = viewVec[num];
>  viewer->frame();
>
>  //glMatrixMode(GL_TEXTURE);
>  //glPopMatrix();
>  //glMatrixMode(GL_PROJECTION);
>  //glPopMatrix();
>  //glMatrixMode(GL_MODELVIEW);
>  //glPopMatrix();
>
>  //glPopAttrib();
>  //glPopClientAttrib();
>
>  //errorNo = glGetError();
>
>  CAVEDisplayBarrier();
> }
>
> void frame()
> {
>  if(CAVEMasterDisplay())
>  {
>    pat->setAttitude(pat->getAttitude() * osg::Quat(3.14 / 180.0, 
> osg::Y_AXIS));
>  }
>
>
>  pat->setPosition(osg::Vec3(-100, -100, -100));
>  int num = CAVEPipeNumber();
>  osgViewer::Viewer* viewer = viewVec[num];
>  osg::Camera* cam = viewer->getCamera();
>  int height = 0;
>  int width = 0;
>  int x = 0;
>  int y = 0;
>  CAVEGetViewport(&x, &y, &width, &height);
>  cam->setViewport(x, y, width, height);
>
>  float viewMatrixGL[16] = {0};
>  float projMatrixGL[16] = {0};
>
>  CAVENavTransform();
>
>  glGetFloatv( GL_MODELVIEW_MATRIX , (float*)viewMatrixGL );
>  glGetFloatv( GL_PROJECTION_MATRIX, (float*)projMatrixGL );
>
>  osg::Matrix viewMatrix(viewMatrixGL);
>  osg::Matrix projMatrix(projMatrixGL);
>
>  // set theproj
>  cam->setProjectionMatrix(projMatrix);
>  // set the view
>  cam->setViewMatrix(viewMatrix);
>
>  CAVEDisplayBarrier();
> }
>
> int main(int argv, char** argc)
> {
>  node = osgDB::readNodeFile("test.iv");
>  pat = new osg::PositionAttitudeTransform();
>  pat->addChild(node);
>
>  CAVEConfigure(NULL, NULL, NULL);
>  CAVEInitApplication(init, 0);
>  CAVEDisplay(display, 0);
>  CAVEFrameFunction(frame, 0);
>  CAVEInit();
>
>  while(1)
>  {
>    OpenThreads::Thread::microSleep(1000);
>  }
> }
>
>
>
>
> I can't find a solution to my problem and I've scoured the forums, net, 
> contacted Mechdyne who owns CAVElib, prayed, and even contemplated 
> sacrificing a virgin but the alter is in for cleaning.  So, any help, insite, 
> or the like would be greatly appreciated.
>
> soulsabr[/code]
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=43802#43802
>
>
>
>
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to