本文整理汇总了C++中VertexDecl::getSize方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexDecl::getSize方法的具体用法?C++ VertexDecl::getSize怎么用?C++ VertexDecl::getSize使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VertexDecl
的用法示例。
在下文中一共展示了VertexDecl::getSize方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: vertexConvert
void vertexConvert(const VertexDecl& _destDecl, void* _destData, const VertexDecl& _srcDecl, const void* _srcData, uint32_t _num)
{
if (_destDecl.m_hash == _srcDecl.m_hash)
{
memcpy(_destData, _srcData, _srcDecl.getSize(_num) );
return;
}
struct ConvertOp
{
enum Enum
{
Set,
Copy,
Convert,
};
Attrib::Enum attr;
Enum op;
uint32_t src;
uint32_t dest;
uint32_t size;
};
ConvertOp convertOp[Attrib::Count];
uint32_t numOps = 0;
for (uint32_t ii = 0; ii < Attrib::Count; ++ii)
{
Attrib::Enum attr = (Attrib::Enum)ii;
if (_destDecl.has(attr) )
{
ConvertOp& cop = convertOp[numOps];
cop.attr = attr;
cop.dest = _destDecl.getOffset(attr);
uint8_t num;
AttribType::Enum type;
bool normalized;
bool asInt;
_destDecl.decode(attr, num, type, normalized, asInt);
cop.size = (*s_attribTypeSize[0])[type][num-1];
if (_srcDecl.has(attr) )
{
cop.src = _srcDecl.getOffset(attr);
cop.op = _destDecl.m_attributes[attr] == _srcDecl.m_attributes[attr] ? ConvertOp::Copy : ConvertOp::Convert;
}
else
{
cop.op = ConvertOp::Set;
}
++numOps;
}
}
if (0 < numOps)
{
const uint8_t* src = (const uint8_t*)_srcData;
uint32_t srcStride = _srcDecl.getStride();
uint8_t* dest = (uint8_t*)_destData;
uint32_t destStride = _destDecl.getStride();
float unpacked[4];
for (uint32_t ii = 0; ii < _num; ++ii)
{
for (uint32_t jj = 0; jj < numOps; ++jj)
{
const ConvertOp& cop = convertOp[jj];
switch (cop.op)
{
case ConvertOp::Set:
memset(dest + cop.dest, 0, cop.size);
break;
case ConvertOp::Copy:
memcpy(dest + cop.dest, src + cop.src, cop.size);
break;
case ConvertOp::Convert:
vertexUnpack(unpacked, cop.attr, _srcDecl, src);
vertexPack(unpacked, true, cop.attr, _destDecl, dest);
break;
}
}
src += srcStride;
dest += destStride;
}
}
}