本文整理汇总了C++中VertexDeclaration::getAutoOrganisedDeclaration方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexDeclaration::getAutoOrganisedDeclaration方法的具体用法?C++ VertexDeclaration::getAutoOrganisedDeclaration怎么用?C++ VertexDeclaration::getAutoOrganisedDeclaration使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VertexDeclaration
的用法示例。
在下文中一共展示了VertexDeclaration::getAutoOrganisedDeclaration方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: copyTempVertexToBuffer
//-----------------------------------------------------------------------------
void ManualObject::copyTempVertexToBuffer(void)
{
mTempVertexPending = false;
RenderOperation* rop = mCurrentSection->getRenderOperation();
if (rop->vertexData->vertexCount == 0 && !mCurrentUpdating)
{
// first vertex, autoorganise decl
VertexDeclaration* oldDcl = rop->vertexData->vertexDeclaration;
rop->vertexData->vertexDeclaration =
oldDcl->getAutoOrganisedDeclaration(false, false);
HardwareBufferManager::getSingleton().destroyVertexDeclaration(oldDcl);
}
resizeTempVertexBufferIfNeeded(++rop->vertexData->vertexCount);
// get base pointer
char* pBase = mTempVertexBuffer + (mDeclSize * (rop->vertexData->vertexCount-1));
const VertexDeclaration::VertexElementList& elemList =
rop->vertexData->vertexDeclaration->getElements();
for (VertexDeclaration::VertexElementList::const_iterator i = elemList.begin();
i != elemList.end(); ++i)
{
float* pFloat = 0;
RGBA* pRGBA = 0;
const VertexElement& elem = *i;
switch(elem.getType())
{
case VET_FLOAT1:
case VET_FLOAT2:
case VET_FLOAT3:
case VET_FLOAT4:
elem.baseVertexPointerToElement(pBase, &pFloat);
break;
case VET_COLOUR:
case VET_COLOUR_ABGR:
case VET_COLOUR_ARGB:
elem.baseVertexPointerToElement(pBase, &pRGBA);
break;
default:
// nop ?
break;
};
RenderSystem* rs;
unsigned short dims;
switch(elem.getSemantic())
{
case VES_POSITION:
*pFloat++ = mTempVertex.position.x;
*pFloat++ = mTempVertex.position.y;
*pFloat++ = mTempVertex.position.z;
break;
case VES_NORMAL:
*pFloat++ = mTempVertex.normal.x;
*pFloat++ = mTempVertex.normal.y;
*pFloat++ = mTempVertex.normal.z;
break;
case VES_TANGENT:
*pFloat++ = mTempVertex.tangent.x;
*pFloat++ = mTempVertex.tangent.y;
*pFloat++ = mTempVertex.tangent.z;
break;
case VES_TEXTURE_COORDINATES:
dims = VertexElement::getTypeCount(elem.getType());
for (ushort t = 0; t < dims; ++t)
*pFloat++ = mTempVertex.texCoord[elem.getIndex()][t];
break;
case VES_DIFFUSE:
rs = Root::getSingleton().getRenderSystem();
if (rs)
rs->convertColourValue(mTempVertex.colour, pRGBA++);
else
*pRGBA++ = mTempVertex.colour.getAsRGBA(); // pick one!
break;
default:
// nop ?
break;
};
}
}