本文整理汇总了C++中VertexDeclaration::modifyElement方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexDeclaration::modifyElement方法的具体用法?C++ VertexDeclaration::modifyElement怎么用?C++ VertexDeclaration::modifyElement使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VertexDeclaration
的用法示例。
在下文中一共展示了VertexDeclaration::modifyElement方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getAutoOrganisedDeclaration
//-----------------------------------------------------------------------
VertexDeclaration* VertexDeclaration::getAutoOrganisedDeclaration(
bool skeletalAnimation, bool vertexAnimation)
{
VertexDeclaration* newDecl = this->clone();
// Set all sources to the same buffer (for now)
const VertexDeclaration::VertexElementList& elems = newDecl->getElements();
VertexDeclaration::VertexElementList::const_iterator i;
unsigned short c = 0;
for (i = elems.begin(); i != elems.end(); ++i, ++c)
{
const VertexElement& elem = *i;
// Set source & offset to 0 for now, before sort
newDecl->modifyElement(c, 0, 0, elem.getType(), elem.getSemantic(), elem.getIndex());
}
newDecl->sort();
// Now sort out proper buffer assignments and offsets
size_t offset = 0;
c = 0;
unsigned short buffer = 0;
VertexElementSemantic prevSemantic = VES_POSITION;
for (i = elems.begin(); i != elems.end(); ++i, ++c)
{
const VertexElement& elem = *i;
bool splitWithPrev = false;
bool splitWithNext = false;
switch (elem.getSemantic())
{
case VES_POSITION:
// For morph animation, we need positions on their own
splitWithPrev = vertexAnimation;
splitWithNext = vertexAnimation;
break;
case VES_NORMAL:
// Normals can't sharing with blend weights/indices
splitWithPrev = (prevSemantic == VES_BLEND_WEIGHTS || prevSemantic == VES_BLEND_INDICES);
// All animated meshes have to split after normal
splitWithNext = (skeletalAnimation || vertexAnimation);
break;
case VES_BLEND_WEIGHTS:
// Blend weights/indices can be sharing with their own buffer only
splitWithPrev = true;
break;
case VES_BLEND_INDICES:
// Blend weights/indices can be sharing with their own buffer only
splitWithNext = true;
break;
}
if (splitWithPrev && offset)
{
++buffer;
offset = 0;
}
prevSemantic = elem.getSemantic();
newDecl->modifyElement(c, buffer, offset,
elem.getType(), elem.getSemantic(), elem.getIndex());
if (splitWithNext)
{
++buffer;
offset = 0;
}
else
{
offset += elem.getSize();
}
}
return newDecl;
}