void FBOViewport::render(DrawActionBase *action) { if(getFrameBufferObject() != NULL) { DrawEnv oEnv; oEnv.setWindow(action->getWindow()); getFrameBufferObject()->activate(&oEnv); Inherited::render(action); getFrameBufferObject()->deactivate(&oEnv); } else { Inherited::render(action); } }
void SortLastWindow::clientRender(RenderActionBase *action) { UInt32 p; UInt32 groupId = getMFServers()->size32(); if(getMFServers()->size()) { if(getClientWindow() != NULL) { setupNodes(groupId); /* getClientWindow()->activate(); getClientWindow()->frameInit(); */ action->setWindow(getClientWindow()); if(getComposer() != NULL) getComposer()->startFrame(); DrawEnv oEnv; oEnv.setWindow(action->getWindow()); // render all viewports for(p = 0; p < getMFPort()->size() ; ++p) { Viewport *vp=getPort(p); oEnv.setViewportDimension(vp->calcPixelLeft (), vp->calcPixelBottom (), vp->calcPixelRight (), vp->calcPixelTop (), vp->calcIsFullWindow()); if(getComposer() != NULL) { getComposer()->startViewport(vp); action->setCamera (vp->getCamera ()); action->setBackground(vp->getBackground()); action->setViewarea (vp ); action->setTravMask (vp->getTravMask ()); action->apply(vp->getRoot()); for(UInt16 i=0; i < vp->getMFForegrounds()->size(); i++) { if(dynamic_cast<StatisticsForeground *>( vp->getForegrounds(i)) == NULL) { vp->getForegrounds(i)->draw(&oEnv); } } getComposer()->composeViewport(vp); for(UInt16 i=0; i < vp->getMFForegrounds()->size(); i++) { if(dynamic_cast<StatisticsForeground *>( vp->getForegrounds(i)) != NULL) { vp->getForegrounds(i)->draw(&oEnv); } } } else { vp->render(action); } } // compose whole window if(getComposer() != NULL) getComposer()->composeWindow(); } } }
void StagedViewport::stretchTargetToFrameBuffer(RenderActionBase *action, FrameBufferObject *target) { Window *pWin = action->getWindow(); if((pWin->getDrawMode() & Window::PartitionDrawMask) == Window::SequentialPartitionDraw) { DrawEnv oEnv; oEnv.setWindow(action->getWindow()); //oEnv.setTileFullSize(getCamera()->tileGetFullSize()); //oEnv.setTileRegion (getCamera()->tileGetRegion ()); // THINKABOUTME KS: //oEnv.setDrawerId (action->getDrawerId ()); //oEnv.setDrawableId(action->getDrawableId()); glClearColor(0.0, 1.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); FrameBufferAttachment* fba = target->getColorAttachments(0); TextureObjChunk* texObj = dynamic_cast<TextureBuffer*>(fba)->getTexture(); if( texObj ) { texObj->activate(&oEnv,0); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0, 1, 0, 1, -1, 1 ); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); float u = 0.0f; float v = 0.0f; // glColor3f(1,1,1); glBegin(GL_QUADS); #if 0 RTsize w,h; buffer->getSize(w,h); float view[4]; view[0] = _optixViewport._viewport.x/(float)w; view[1] = _optixViewport._viewport.y/(float)h; view[2] = view[0] + _optixViewport._viewport.z/(float)w; view[3] = view[1] + _optixViewport._viewport.w/(float)h; glTexCoord2f(view[0], view[1]); glVertex2f(0.0f, 0.0f); glTexCoord2f(view[2], view[1]); glVertex2f(1.0f, 0.0f); glTexCoord2f(view[2], view[3]); glVertex2f(1.0f, 1.0f); glTexCoord2f(view[0], view[3]); glVertex2f(0.0f, 1.0f); #else glTexCoord2f(u, v); glVertex2f(0.1f, 0.1f); glTexCoord2f(1.0f, v); glVertex2f(.9f, 0.1f); glTexCoord2f(1.0f - u, 1.0f - v); glVertex2f(.9f, .9f); glTexCoord2f(u, 1.0f - v); glVertex2f(0.1f, .9f); #endif glEnd(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); texObj->deactivate(&oEnv,0); } } else { // TODO: ??? OSG_ASSERT(false); } }
/*! client rendering */ void SortLastWindow::clientRender(DrawActionBase *action) { UInt32 p; UInt32 groupId = getServers().size(); UInt32 l,b,r,t; UInt32 front,back; SortLastWindow *clusterWindow(this); if(getServers().size()) { Connection *srcConnection= getNetwork()->getConnection(groupId); if(getClientWindow() != NULL) { setupNodes(groupId); /* getClientWindow()->activate(); getClientWindow()->frameInit(); */ action->setWindow(getClientWindow()); if(getComposer() != NULL) getComposer()->startFrame(); DrawEnv oEnv; oEnv.setWindow(action->getWindow()); // render all viewports for(p = 0; p < getPort().size() ; ++p) { Viewport *vp=getPort()[p]; if(getComposer() != NULL) { getComposer()->startViewport(vp); action->setCamera (vp->getCamera ()); action->setBackground(vp->getBackground()); action->setViewport (vp ); action->setTravMask (vp->getTravMask ()); action->apply(vp->getRoot()); for(UInt16 i=0; i < vp->getForegrounds().size(); i++) { if(dynamic_cast<StatisticsForeground *>( vp->getForegrounds(i)) == NULL) { vp->getForegrounds(i)->draw(&oEnv, vp); } } getComposer()->composeViewport(vp); for(UInt16 i=0; i < vp->getForegrounds().size(); i++) { if(dynamic_cast<StatisticsForeground *>( vp->getForegrounds(i)) != NULL) { vp->getForegrounds(i)->draw(&oEnv, vp); } } } else { vp->render(action); } } // compose whole window if(getComposer() != NULL) getComposer()->composeWindow(); } } }