本文整理匯總了C++中Technique::getParent方法的典型用法代碼示例。如果您正苦於以下問題:C++ Technique::getParent方法的具體用法?C++ Technique::getParent怎麽用?C++ Technique::getParent使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類Technique
的用法示例。
在下文中一共展示了Technique::getParent方法的5個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: addRenderable
//-----------------------------------------------------------------------
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);
}
示例2: visit
void visit(Renderable* rend, ushort lodIndex, bool isDebug,
Any* pAny = 0)
{
Technique* tech = rend->getTechnique();
bool techReceivesShadows = tech && tech->getParent()->getReceiveShadows();
anyReceiveShadows = anyReceiveShadows ||
techReceivesShadows || !tech;
}
示例3: addRenderable
//-----------------------------------------------------------------------
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);
}
示例4: translateTextureUnit
/*
note: we can know the texture unit index by getting parent then finding it in the list of children
*/
void SGScriptTranslator::translateTextureUnit(ScriptCompiler* compiler, const AbstractNodePtr &node)
{
ObjectAbstractNode *obj = static_cast<ObjectAbstractNode*>(node.get());
TextureUnitState* texState = any_cast<TextureUnitState*>(obj->parent->context);
Pass* pass = texState->getParent();
Technique* technique = pass->getParent();
Material* material = technique->getParent();
ShaderGenerator* shaderGenerator = ShaderGenerator::getSingletonPtr();
String dstTechniqueSchemeName = obj->name;
bool techniqueCreated;
// Make sure the scheme name is valid - use default if none exists.
if (dstTechniqueSchemeName.empty())
dstTechniqueSchemeName = ShaderGenerator::DEFAULT_SCHEME_NAME;
//check if technique already created
techniqueCreated = shaderGenerator->hasShaderBasedTechnique(material->getName(),
material->getGroup(),
technique->getSchemeName(),
dstTechniqueSchemeName);
if (techniqueCreated == false)
{
// Create the shader based technique.
techniqueCreated = shaderGenerator->createShaderBasedTechnique(material->getName(),
material->getGroup(),
technique->getSchemeName(),
dstTechniqueSchemeName,
shaderGenerator->getCreateShaderOverProgrammablePass());
}
// Case technique successfully created.
if (techniqueCreated)
{
//Attempt to get the render state which might have been created by the pass parsing
mGeneratedRenderState = shaderGenerator->getRenderState(dstTechniqueSchemeName,
material->getName(), material->getGroup(), pass->getIndex());
// Go over all the render state properties.
for(AbstractNodeList::iterator i = obj->children.begin(); i != obj->children.end(); ++i)
{
if((*i)->type == ANT_PROPERTY)
{
PropertyAbstractNode *prop = static_cast<PropertyAbstractNode*>((*i).get());
SubRenderState* subRenderState = ShaderGenerator::getSingleton().createSubRenderState(compiler, prop, texState, this);
if (subRenderState)
{
addSubRenderState(subRenderState, dstTechniqueSchemeName, material->getName(),
material->getGroup(), pass->getIndex());
}
}
else
{
processNode(compiler, *i);
}
}
mGeneratedRenderState = NULL;
}
}
示例5: translatePass
//-----------------------------------------------------------------------------
void SGScriptTranslator::translatePass(ScriptCompiler* compiler, const AbstractNodePtr &node)
{
ObjectAbstractNode *obj = static_cast<ObjectAbstractNode*>(node.get());
Pass* pass = any_cast<Pass*>(obj->parent->context);
Technique* technique = pass->getParent();
Material* material = technique->getParent();
ShaderGenerator* shaderGenerator = ShaderGenerator::getSingletonPtr();
String dstTechniqueSchemeName = obj->name;
bool techniqueCreated;
// Make sure the scheme name is valid - use default if none exists.
if (dstTechniqueSchemeName.empty())
dstTechniqueSchemeName = ShaderGenerator::DEFAULT_SCHEME_NAME;
// Create the shader based technique.
techniqueCreated = shaderGenerator->createShaderBasedTechnique(material->getName(),
material->getGroup(),
technique->getSchemeName(),
dstTechniqueSchemeName,
shaderGenerator->getCreateShaderOverProgrammablePass());
// Case technique successfully created.
if (techniqueCreated)
{
// Go over all the render state properties.
for(AbstractNodeList::iterator i = obj->children.begin(); i != obj->children.end(); ++i)
{
if((*i)->type == ANT_PROPERTY)
{
PropertyAbstractNode *prop = static_cast<PropertyAbstractNode*>((*i).get());
// Handle light count property.
if (prop->name == "light_count")
{
if (prop->values.size() != 3)
{
compiler->addError(ScriptCompiler::CE_INVALIDPARAMETERS, prop->file, prop->line);
}
else
{
int lightCount[3];
if (false == SGScriptTranslator::getInts(prop->values.begin(), prop->values.end(), lightCount, 3))
{
compiler->addError(ScriptCompiler::CE_INVALIDPARAMETERS, prop->file, prop->line);
}
else
{
shaderGenerator->createScheme(dstTechniqueSchemeName);
RenderState* renderState = shaderGenerator->getRenderState(dstTechniqueSchemeName,
material->getName(), material->getGroup(), pass->getIndex());
renderState->setLightCount(lightCount);
renderState->setLightCountAutoUpdate(false);
}
}
}
// Handle the rest of the custom properties.
else
{
SubRenderState* subRenderState = ShaderGenerator::getSingleton().createSubRenderState(compiler, prop, pass, this);
if (subRenderState)
{
addSubRenderState(subRenderState, dstTechniqueSchemeName, material->getName(), material->getGroup(), pass->getIndex());
}
}
}
else
{
processNode(compiler, *i);
}
}
mGeneratedRenderState = NULL;
}
}