virtual void execute(SceneManager *sm, RenderSystem *rs) { // Fire listener instance->_fireNotifyMaterialRender(pass_id, mat); Rectangle2D * mRectangle=static_cast<Rectangle2D *>(CompositorManager::getSingleton()._getTexturedRectangle2D()); if (mQuadCornerModified) { // insure positions are using peculiar render system offsets RenderSystem* rs = Root::getSingleton().getRenderSystem(); Viewport* vp = rs->_getViewport(); Real hOffset = rs->getHorizontalTexelOffset() / (0.5 * vp->getActualWidth()); Real vOffset = rs->getVerticalTexelOffset() / (0.5 * vp->getActualHeight()); mRectangle->setCorners(mQuadLeft + hOffset, mQuadTop - vOffset, mQuadRight + hOffset, mQuadBottom - vOffset); } // Queue passes from mat Technique::PassIterator i = technique->getPassIterator(); while(i.hasMoreElements()) { sm->_injectRenderWithPass( i.getNext(), mRectangle, false // don't allow replacement of shadow passes ); } }
//--------------------------------------------------------------------- Viewport::~Viewport() { RenderSystem* rs = Root::getSingleton().getRenderSystem(); if ((rs) && (rs->_getViewport() == this)) { rs->_setViewport(NULL); } }
//--------------------------------------------------------------------- void Viewport::clear(unsigned int buffers, const ColourValue& col, Real depth, unsigned short stencil) { RenderSystem* rs = Root::getSingleton().getRenderSystem(); if (rs) { Viewport* currentvp = rs->_getViewport(); rs->_setViewport(this); rs->clearFrameBuffer(buffers, col, depth, stencil); if (currentvp && currentvp != this) rs->_setViewport(currentvp); } }
//----------------------------------------------------------------------- Renderable *CompositorManager::_getTexturedRectangle2D() { if(!mRectangle) { /// 2D rectangle, to use for render_quad passes mRectangle = OGRE_NEW Rectangle2D(true, HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY_DISCARDABLE); } RenderSystem* rs = Root::getSingleton().getRenderSystem(); Viewport* vp = rs->_getViewport(); Real hOffset = rs->getHorizontalTexelOffset() / (0.5f * vp->getActualWidth()); Real vOffset = rs->getVerticalTexelOffset() / (0.5f * vp->getActualHeight()); mRectangle->setCorners(-1 + hOffset, 1 - vOffset, 1 + hOffset, -1 - vOffset); return mRectangle; }
//----------------------------------------------------------------------- Renderable *CompositorManager::_getTexturedRectangle2D() { if(!mRectangle) { /// 2D rectangle, to use for render_quad passes mRectangle = new Rectangle2D(true); } RenderSystem* rs = Root::getSingleton().getRenderSystem(); Viewport* vp = rs->_getViewport(); Real hOffset = rs->getHorizontalTexelOffset() / (0.5 * vp->getActualWidth()); Real vOffset = rs->getVerticalTexelOffset() / (0.5 * vp->getActualHeight()); mRectangle->setCorners(-1 + hOffset, 1 - vOffset, 1 + hOffset, -1 - vOffset); return mRectangle; }
//--------------------------------------------------------------------- Viewport::~Viewport() { ListenerList listenersCopy; std::swap(mListeners, listenersCopy); for (ListenerList::iterator i = listenersCopy.begin(); i != listenersCopy.end(); ++i) { (*i)->viewportDestroyed(this); } RenderSystem* rs = Root::getSingleton().getRenderSystem(); if ((rs) && (rs->_getViewport() == this)) { rs->_setViewport(NULL); } }