//----------------------------------------------------------------------- void RenderQueue::addRenderable(Renderable* pRend, uint8 groupID, ushort priority) { // Find group RenderQueueGroup* pGroup = getQueueGroup(groupID); Technique* pTech; // tell material it's been used if (!pRend->getMaterial().isNull()) pRend->getMaterial()->touch(); // Check material & technique supplied (the former since the default implementation // of getTechnique is based on it for backwards compatibility if(pRend->getMaterial().isNull() || !(pTech = pRend->getTechnique())) { // Use default base white MaterialPtr baseWhite = MaterialManager::getSingleton().getByName("BaseWhite"); pTech = baseWhite->getTechnique(0); } if (mRenderableListener) { // Allow listener to override technique and to abort if (!mRenderableListener->renderableQueued(pRend, groupID, priority, &pTech, this)) return; // rejected // tell material it's been used (incase changed) pTech->getParent()->touch(); } pGroup->addRenderable(pRend, pTech, priority); }
//----------------------------------------------------------------------- void RenderQueue::merge( const RenderQueue* rhs ) { ConstQueueGroupIterator it = rhs->_getQueueGroupIterator( ); while( it.hasMoreElements() ) { uint8 groupID = it.peekNextKey(); RenderQueueGroup* pSrcGroup = it.getNext(); RenderQueueGroup* pDstGroup = getQueueGroup( groupID ); pDstGroup->merge( pSrcGroup ); } }
//----------------------------------------------------------------------- void RenderQueue::addRenderable(Renderable* pRend, RenderQueueGroupID groupID, ushort priority) { // Find group RenderQueueGroupMap::iterator groupIt; RenderQueueGroup* pGroup; groupIt = mGroups.find(groupID); if (groupIt == mGroups.end()) { // Insert new pGroup = new RenderQueueGroup(); mGroups.insert(RenderQueueGroupMap::value_type(groupID, pGroup)); } else { pGroup = groupIt->second; } pGroup->addRenderable(pRend, priority); }
//----------------------------------------------------------------------- void RenderQueue::addRenderable(Renderable* pRend, uint8 groupID, ushort priority) { // Find group RenderQueueGroup* pGroup = getQueueGroup(groupID); Technique* pTech; // tell material it's been used if (pRend->getMaterial()) pRend->getMaterial()->touch(); // Check material & technique supplied (the former since the default implementation // of getTechnique is based on it for backwards compatibility if(!pRend->getMaterial() || !pRend->getTechnique()) { // Use default base white, with lighting only if vertices has normals RenderOperation op; pRend->getRenderOperation(op); bool useLighting = (NULL != op.vertexData->vertexDeclaration->findElementBySemantic(VES_NORMAL)); MaterialPtr defaultMat = MaterialManager::getSingleton().getDefaultMaterial(useLighting); defaultMat->load(); pTech = defaultMat->getBestTechnique(); } else pTech = pRend->getTechnique(); if (mRenderableListener) { // Allow listener to override technique and to abort if (!mRenderableListener->renderableQueued(pRend, groupID, priority, &pTech, this)) return; // rejected // tell material it's been used (incase changed) pTech->getParent()->touch(); } pGroup->addRenderable(pRend, pTech, priority); }