本文整理汇总了C++中technique::PassIterator::hasMoreElements方法的典型用法代码示例。如果您正苦于以下问题:C++ PassIterator::hasMoreElements方法的具体用法?C++ PassIterator::hasMoreElements怎么用?C++ PassIterator::hasMoreElements使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类technique::PassIterator
的用法示例。
在下文中一共展示了PassIterator::hasMoreElements方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: update
void MaterialFactory::update()
{
for (std::vector<std::string>::const_iterator it = timeMtrs.begin();
it != timeMtrs.end(); ++it)
{
MaterialPtr mtr = MaterialManager::getSingleton().getByName( (*it) );
if (!mtr.isNull())
{ Material::TechniqueIterator techIt = mtr->getTechniqueIterator();
while (techIt.hasMoreElements())
{ Technique* tech = techIt.getNext();
Technique::PassIterator passIt = tech->getPassIterator();
while (passIt.hasMoreElements())
{ Pass* pass = passIt.getNext();
// time
if (pass->hasFragmentProgram() && pass->getFragmentProgramParameters()->_findNamedConstantDefinition("time", false))
pass->getFragmentProgramParameters()->setNamedConstantFromTime( "time", 1 );
}
}
}
}
}
示例2: addSolidRenderable
//-----------------------------------------------------------------------
void RenderPriorityGroup::addSolidRenderable(Technique* pTech,
Renderable* rend, bool addToNoShadow)
{
Technique::PassIterator pi = pTech->getPassIterator();
QueuedRenderableCollection* collection;
if (addToNoShadow)
{
collection = &mSolidsNoShadowReceive;
}
else
{
collection = &mSolidsBasic;
}
while (pi.hasMoreElements())
{
// Insert into solid list
Pass* p = pi.getNext();
collection->addRenderable(p, rend);
}
}
示例3: isPotentialOccluder
bool OcclusionQuery::isPotentialOccluder(Ogre::SceneNode* node)
{
bool result = false;
for (unsigned int i=0; i < node->numAttachedObjects(); ++i)
{
MovableObject* ob = node->getAttachedObject(i);
std::string type = ob->getMovableType();
if (type == "Entity")
{
Entity* ent = static_cast<Entity*>(ob);
for (unsigned int j=0; j < ent->getNumSubEntities(); ++j)
{
// if any sub entity has a material with depth write off,
// consider the object as not an occluder
MaterialPtr mat = ent->getSubEntity(j)->getMaterial();
Material::TechniqueIterator techIt = mat->getTechniqueIterator();
while (techIt.hasMoreElements())
{
Technique* tech = techIt.getNext();
Technique::PassIterator passIt = tech->getPassIterator();
while (passIt.hasMoreElements())
{
Pass* pass = passIt.getNext();
if (pass->getDepthWriteEnabled() == false)
return false;
else
result = true;
}
}
}
}
}
return result;
}
示例4: renderStaticGeometry
//-----------------------------------------------------------------------
void BspSceneManager::renderStaticGeometry(void)
{
// Check we should be rendering
if (!isRenderQueueToBeProcessed(mWorldGeometryRenderQueue))
return;
// Cache vertex/face data first
vector<StaticFaceGroup*>::type::const_iterator faceGrpi;
static RenderOperation patchOp;
// no world transform required
mDestRenderSystem->_setWorldMatrix(Matrix4::IDENTITY);
// Set view / proj
setViewMatrix(mCachedViewMatrix);
mDestRenderSystem->_setProjectionMatrix(mCameraInProgress->getProjectionMatrixRS());
// For each material in turn, cache rendering data & render
MaterialFaceGroupMap::const_iterator mati;
for (mati = mMatFaceGroupMap.begin(); mati != mMatFaceGroupMap.end(); ++mati)
{
// Get Material
Material* thisMaterial = mati->first;
// Empty existing cache
mRenderOp.indexData->indexCount = 0;
// lock index buffer ready to receive data
unsigned int* pIdx = static_cast<unsigned int*>(
mRenderOp.indexData->indexBuffer->lock(HardwareBuffer::HBL_DISCARD));
for (faceGrpi = mati->second.begin(); faceGrpi != mati->second.end(); ++faceGrpi)
{
// Cache each
unsigned int numelems = cacheGeometry(pIdx, *faceGrpi);
mRenderOp.indexData->indexCount += numelems;
pIdx += numelems;
}
// Unlock the buffer
mRenderOp.indexData->indexBuffer->unlock();
// Skip if no faces to process (we're not doing flare types yet)
if (mRenderOp.indexData->indexCount == 0)
continue;
Technique::PassIterator pit = thisMaterial->getTechnique(0)->getPassIterator();
while (pit.hasMoreElements())
{
_setPass(pit.getNext());
mDestRenderSystem->_render(mRenderOp);
}
} // for each material
/*
if (mShowNodeAABs)
{
mDestRenderSystem->_render(mAABGeometry);
}
*/
}
示例5: collectPasses
void CompositorInstance::collectPasses(TargetOperation &finalState, CompositionTargetPass *target)
{
/// Here, passes are converted into render target operations
Pass *targetpass;
Technique *srctech;
MaterialPtr mat, srcmat;
CompositionTargetPass::PassIterator it = target->getPassIterator();
while(it.hasMoreElements())
{
CompositionPass *pass = it.getNext();
switch(pass->getType())
{
case CompositionPass::PT_CLEAR:
queueRenderSystemOp(finalState, new RSClearOperation(
pass->getClearBuffers(),
pass->getClearColour(),
pass->getClearDepth(),
pass->getClearStencil()
));
break;
case CompositionPass::PT_STENCIL:
queueRenderSystemOp(finalState, new RSStencilOperation(
pass->getStencilCheck(),pass->getStencilFunc(), pass->getStencilRefValue(),
pass->getStencilMask(), pass->getStencilFailOp(), pass->getStencilDepthFailOp(),
pass->getStencilPassOp(), pass->getStencilTwoSidedOperation()
));
break;
case CompositionPass::PT_RENDERSCENE:
if(pass->getFirstRenderQueue() < finalState.currentQueueGroupID)
{
/// Mismatch -- warn user
/// XXX We could support repeating the last queue, with some effort
LogManager::getSingleton().logMessage("Warning in compilation of Compositor "
+mCompositor->getName()+": Attempt to render queue "+
StringConverter::toString(pass->getFirstRenderQueue())+" before "+
StringConverter::toString(finalState.currentQueueGroupID));
}
/// Add render queues
for(int x=pass->getFirstRenderQueue(); x<=pass->getLastRenderQueue(); ++x)
{
assert(x>=0);
finalState.renderQueues.set(x);
}
finalState.currentQueueGroupID = pass->getLastRenderQueue()+1;
finalState.findVisibleObjects = true;
finalState.materialScheme = target->getMaterialScheme();
break;
case CompositionPass::PT_RENDERQUAD:
srcmat = pass->getMaterial();
if(srcmat.isNull())
{
/// No material -- warn user
LogManager::getSingleton().logMessage("Warning in compilation of Compositor "
+mCompositor->getName()+": No material defined for composition pass");
break;
}
srcmat->compile();
if(srcmat->getNumSupportedTechniques()==0)
{
/// No supported techniques -- warn user
LogManager::getSingleton().logMessage("Warning in compilation of Compositor "
+mCompositor->getName()+": material "+srcmat->getName()+" has no supported techniques");
break;
}
srctech = srcmat->getBestTechnique(0);
/// Create local material
MaterialPtr mat = createLocalMaterial();
/// Copy and adapt passes from source material
Technique::PassIterator i = srctech->getPassIterator();
while(i.hasMoreElements())
{
Pass *srcpass = i.getNext();
/// Create new target pass
targetpass = mat->getTechnique(0)->createPass();
(*targetpass) = (*srcpass);
/// Set up inputs
for(size_t x=0; x<pass->getNumInputs(); ++x)
{
String inp = pass->getInput(x);
if(!inp.empty())
{
if(x < targetpass->getNumTextureUnitStates())
{
targetpass->getTextureUnitState((ushort)x)->setTextureName(getSourceForTex(inp));
}
else
{
/// Texture unit not there
LogManager::getSingleton().logMessage("Warning in compilation of Compositor "
+mCompositor->getName()+": material "+srcmat->getName()+" texture unit "
+StringConverter::toString(x)+" out of bounds");
}
}
}
}
queueRenderSystemOp(finalState, new RSQuadOperation(this,pass->getIdentifier(),mat));
break;
}
//.........这里部分代码省略.........
示例6: changeShadows
//.........这里部分代码省略.........
OverlayContainer* debugPanel;
// destroy container if exists
try
{
if (debugPanel =
static_cast<OverlayContainer*>(
mgr.getOverlayElement("Ogre/DebugTexPanel" + toStr(i)
)))
mgr.destroyOverlayElement(debugPanel);
}
catch (Ogre::Exception&) {}
debugPanel = (OverlayContainer*)
(OverlayManager::getSingleton().createOverlayElement("Panel", "Ogre/DebugTexPanel" + StringConverter::toString(i)));
debugPanel->_setPosition(0.8, i*0.25);
debugPanel->_setDimensions(0.2, 0.24);
debugPanel->setMaterialName(debugMat->getName());
debugPanel->show();
overlay->add2D(debugPanel);
overlay->show();
}
#endif
}
materialFactory->setNumShadowTex(num);
materialFactory->setShadows(pSet->shadow_type != 0);
materialFactory->setShadowsDepth(bDepth);
materialFactory->generate();
// set terrain lightmap texture and terrainWorldSize for all materials that need it
if (terrain) // naive check if a game has been started already
{
for (std::vector<std::string>::const_iterator it = materialFactory->terrainLightMapMtrs.begin();
it != materialFactory->terrainLightMapMtrs.end(); ++it)
{
MaterialPtr mtr = MaterialManager::getSingleton().getByName( (*it) );
if (!mtr.isNull())
{ Material::TechniqueIterator techIt = mtr->getTechniqueIterator();
while (techIt.hasMoreElements())
{ Technique* tech = techIt.getNext();
Technique::PassIterator passIt = tech->getPassIterator();
while (passIt.hasMoreElements())
{ Pass* pass = passIt.getNext();
Pass::TextureUnitStateIterator tusIt = pass->getTextureUnitStateIterator();
while (tusIt.hasMoreElements())
{
TextureUnitState* tus = tusIt.getNext();
if (tus->getName() == "terrainLightMap")
{
tus->setTextureName( terrain->getLightmap()->getName() );
pass->getFragmentProgramParameters()->setNamedConstant( "terrainWorldSize", Real( sc.td.fTerWorldSize ) );
}
}
} } }
}
}
// ------------------- update the paged-geom materials
// grass is not cloned, just need to set new shader parameters
if (grass)
{
GrassLoader *grassLoader = static_cast<GrassLoader*>(grass->getPageLoader());
for (std::list<GrassLayer*>::iterator it= grassLoader->getLayerList().begin();
it != grassLoader->getLayerList().end(); ++it)
{
GrassLayer* layer = (*it);
layer->applyShader();
}
}
// trees are more complicated since they are cloned
if(trees)
{
trees->reloadGeometry();
std::vector<ResourcePtr> reosurceToDelete;
ResourceManager::ResourceMapIterator it = MaterialManager::getSingleton().getResourceIterator();
while (it.hasMoreElements())
{
ResourcePtr material = it.getNext();
String materialName = material->getName();
std::string::size_type pos =materialName.find("BatchMat|");
if( pos != std::string::npos ) {
reosurceToDelete.push_back(material);
}
}
for(int i=0;i<reosurceToDelete.size();i++)
{
MaterialManager::getSingleton().remove(reosurceToDelete[i]);
}
}
UpdPSSMMaterials();
ti.update(); /// time
float dt = ti.dt * 1000.f;
LogO(String("::: Time Shadows: ") + toStr(dt) + " ms");
}
示例7: Create
void CarReflection::Create()
{
bFirstFrame = true;
if (pSet->refl_mode == "single") cubetexName = "ReflectionCube"; // single: use 1st cubemap
else if (pSet->refl_mode == "full")
{
cubetexName = "ReflectionCube" + toStr(iIndex);
// first cubemap: no index
if (cubetexName == "ReflectionCube0")
cubetexName = "ReflectionCube";
}
else /* static */
cubetexName = "ReflectionCube";
TextureManager* tm = TextureManager::getSingletonPtr();
int size = ciShadowSizesA[pSet->refl_size]; // /2 ?
// create cube render texture
if (! (pSet->refl_mode == "single" && iIndex != 0) )
{
cubetex = tm->createManual(cubetexName,
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_CUBE_MAP,
size,size, 0/*mips*/, PF_R8G8B8, TU_RENDERTARGET);
//LogO("created rt cube");
for (int face = 0; face < 6; face++)
{
Camera* mCam = pSceneMgr->createCamera("Reflect_" + toStr(iIndex) + "_" + toStr(face));
mCam->setAspectRatio(1.0f); mCam->setFOVy(Degree(90));
mCam->setNearClipDistance(0.1);
//mCam->setFarClipDistance(pSet->refl_dist); //sky-
RenderTarget* mRT = cubetex->getBuffer(face)->getRenderTarget();
//LogO( "rt face Name: " + mRT->getName() );
mRT->removeAllViewports();
Viewport* vp = mRT->addViewport(mCam);
vp->setOverlaysEnabled(false);
vp->setVisibilityMask(RV_MaskReflect);
mRT->setAutoUpdated(false);
//mRT->addListener(this); //-
mCam->setPosition(Vector3::ZERO);
Vector3 lookAt(0,0,0), up(0,0,0), right(0,0,0); switch(face)
{
case 0: lookAt.x =-1; up.y = 1; right.z = 1; break; // +X
case 1: lookAt.x = 1; up.y = 1; right.z =-1; break; // -X
case 2: lookAt.y =-1; up.z = 1; right.x = 1; break; // +Y
case 3: lookAt.y = 1; up.z =-1; right.x = 1; break; // -Y
case 4: lookAt.z = 1; up.y = 1; right.x =-1; break; // +Z
case 5: lookAt.z =-1; up.y = 1; right.x =-1; break; // -Z
}
Quaternion orient( right, up, lookAt ); mCam->setOrientation( orient );
pCams[face] = mCam;
pRTs[face] = mRT;
}
}
// Iterate through our materials and add an index to ReflectionCube texture reference
for (int i=0; i < NumMaterials; i++)
{
MaterialPtr mtr = MaterialManager::getSingleton().getByName(sMtr[i]);
if (!mtr.isNull())
{ Material::TechniqueIterator techIt = mtr->getTechniqueIterator();
while (techIt.hasMoreElements())
{ Technique* tech = techIt.getNext();
Technique::PassIterator passIt = tech->getPassIterator();
while (passIt.hasMoreElements())
{ Pass* pass = passIt.getNext();
Pass::TextureUnitStateIterator tusIt = pass->getTextureUnitStateIterator();
while (tusIt.hasMoreElements())
{
TextureUnitState* tus = tusIt.getNext();
if (tus->getTextureName() == "ReflectionCube")
tus->setTextureName(cubetexName);
} } } } }
}
示例8: generate
//.........这里部分代码省略.........
bool exists = false;
shaderMap::iterator sit;
for (sit = mShaderCache.begin();
sit != mShaderCache.end(); ++sit)
{
if ( sit->second->isEqual( shaderProps ) )
{
exists = true;
break;
}
}
if (!exists)
generator->mShaderCached = false;
else
{
generator->mShaderCached = true;
generator->mVertexProgram = sit->first.first;
generator->mFragmentProgram = sit->first.second;
}
generator->mDef = (*it);
generator->mShader = shaderProps;
generator->generate();
// insert into cache
#ifdef USE_CACHE
if (!exists)
{
if (!generator->mVertexProgram.isNull() && !generator->mFragmentProgram.isNull())
mShaderCache[ std::make_pair(generator->mVertexProgram, generator->mFragmentProgram) ] = shaderProps;
else
delete shaderProps;
}
else
delete shaderProps;
#else
delete shaderProps;
#endif
}
bSettingsChanged = false;
ti.update(); /// time
float dt = ti.dt * 1000.f;
LogO(String("::: Time MaterialFactory: ") + toStr(dt) + " ms");
// recreate cloned car materials
#ifndef ROAD_EDITOR
pApp->recreateCarMtr();
#endif
}
else
{
LogO("[MaterialFactory] settings not changed, using old materials");
}
// update params
for (std::vector<MaterialDefinition*>::iterator it=mDefinitions.begin();
it!=mDefinitions.end(); ++it)
{
MaterialPtr mat = MaterialManager::getSingleton().getByName( (*it)->getName() );
setShaderParams(mat);
}
#ifdef USE_CUSTOM_TERRAIN_MATERIAL
// update terrain params
if (!mTerrain) return;
MaterialPtr terrainMat = mTerrain->_getMaterial();
if (!terrainMat.isNull())
{
Material::TechniqueIterator techIt = terrainMat->getTechniqueIterator();
while (techIt.hasMoreElements())
{
Technique* tech = techIt.getNext();
Technique::PassIterator passIt = tech->getPassIterator();
while (passIt.hasMoreElements())
{
Pass* pass = passIt.getNext();
if (!pass->hasFragmentProgram()
|| !pass->getFragmentProgramParameters()->_findNamedConstantDefinition("fadeStart_farDist", false)) continue;
float fadeDist;
if (mSceneMgr->getShadowFarDistance() != 0)
fadeDist = getShadowsFadeDistance()/mSceneMgr->getShadowFarDistance();
else
fadeDist = 0.f;
pass->getFragmentProgramParameters()->setNamedConstant("fadeStart_farDist", Vector3(
fadeDist,
mSceneMgr->getShadowFarDistance(),
float(getShadowsFade())
));
}
}
}
#endif
}
示例9: setShaderParams
void MaterialFactory::setShaderParams(MaterialPtr mat)
{
if (mat.isNull()) return;
Material::TechniqueIterator techIt = mat->getTechniqueIterator();
while (techIt.hasMoreElements())
{
Technique* tech = techIt.getNext();
Technique::PassIterator passIt = tech->getPassIterator();
while (passIt.hasMoreElements())
{
Pass* pass = passIt.getNext();
if (pass->hasFragmentProgram())
{
// shadow fading parameters
if ( getShadowsFade()
&& pass->getFragmentProgramParameters()->_findNamedConstantDefinition("fadeStart_farDist", false)
&& mSceneMgr
)
{
float fadeDist;
if (mSceneMgr->getShadowFarDistance() != 0)
fadeDist = getShadowsFadeDistance()/mSceneMgr->getShadowFarDistance();
else
fadeDist = 0.f;
pass->getFragmentProgramParameters()->setNamedConstant("fadeStart_farDist", Vector3(
fadeDist,
mSceneMgr->getShadowFarDistance(),
float(getShadowsFade())
));
}
// terrain lightmap name & size
if ( mTerrain && !mTerrain->getLightmap().isNull() )
{
if (pass->getFragmentProgramParameters()->_findNamedConstantDefinition("terrainWorldSize", false))
pass->getFragmentProgramParameters()->setNamedConstant( "terrainWorldSize", Real( mTerrain->getWorldSize() ) );
Pass::TextureUnitStateIterator tusIt = pass->getTextureUnitStateIterator();
while (tusIt.hasMoreElements())
{
TextureUnitState* tus = tusIt.getNext();
if (tus->getName() == "terrainLightMap")
{
tus->setTextureName( mTerrain->getLightmap()->getName() );
}
}
}
if (pass->getFragmentProgramParameters()->_findNamedConstantDefinition("invTerSize", false))
pass->getFragmentProgramParameters()->setNamedConstant("invTerSize", 1.f / Real(pApp->sc.td.fTerWorldSize));
// pssm split points
if ( pass->getFragmentProgramParameters()->_findNamedConstantDefinition("pssmSplitPoints", false) && mPSSM)
{
const PSSMShadowCameraSetup::SplitPointList& splitPointList = mPSSM->getSplitPoints();
Vector4 splitPoints;
for (size_t i = 0; i < splitPointList.size(); ++i)
splitPoints[i] = splitPointList[i];
pass->getFragmentProgramParameters()->setNamedConstant("pssmSplitPoints", splitPoints);
}
}
}
}
}