本文整理匯總了C++中Technique::getSchemeName方法的典型用法代碼示例。如果您正苦於以下問題:C++ Technique::getSchemeName方法的具體用法?C++ Technique::getSchemeName怎麽用?C++ Technique::getSchemeName使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類Technique
的用法示例。
在下文中一共展示了Technique::getSchemeName方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: 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;
}
}
示例2: 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;
}
}