| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #include "CmMeshBase.h"
- #include "CmMeshBaseRTTI.h"
- #include "CmCoreThread.h"
- #include "CmDebug.h"
- namespace CamelotFramework
- {
- MeshBase::MeshBase(UINT32 numVertices, UINT32 numIndices, DrawOperationType drawOp)
- :mNumIndices(numIndices), mNumVertices(numVertices), mDefaultSubMesh(0, numIndices, drawOp)
- {
- mSubMeshes.reserve(10);
- }
- MeshBase::MeshBase()
- {
- mSubMeshes.reserve(10);
- }
- MeshBase::~MeshBase()
- {
- }
- void MeshBase::clearSubMeshes()
- {
- THROW_IF_CORE_THREAD;
- mSubMeshes.clear();
- }
- void MeshBase::addSubMesh(UINT32 indexOffset, UINT32 indexCount, DrawOperationType drawOp)
- {
- if((indexOffset + indexCount) > mNumIndices)
- {
- LOGWRN("Provided sub-mesh references indexes out of range. Sub-mesh range: "
- + toString(indexOffset) + " .. " + toString(indexOffset + indexCount) + "." \
- "Valid range is: 0 .. " + toString(mNumIndices) + ". Ignoring command.");
- return;
- }
- mSubMeshes.push_back(SubMesh(indexOffset, indexCount, drawOp));
- }
- void MeshBase::setSubMeshes(const Vector<SubMesh>::type& subMeshes)
- {
- THROW_IF_CORE_THREAD;
- for(auto& subMesh : subMeshes)
- {
- if((subMesh.indexOffset + subMesh.indexCount) > mNumIndices)
- {
- LOGWRN("Provided sub-mesh references indexes out of range. Sub-mesh range: "
- + toString(subMesh.indexOffset) + " .. " + toString(subMesh.indexOffset + subMesh.indexCount) + "." \
- "Valid range is: 0 .. " + toString(mNumIndices) + ". Ignoring command.");
- return;
- }
- }
- mSubMeshes = subMeshes;
- }
- const SubMesh& MeshBase::getSubMesh(UINT32 subMeshIdx) const
- {
- THROW_IF_CORE_THREAD;
- if(mSubMeshes.size() == 0 && subMeshIdx == 0)
- {
- return mDefaultSubMesh;
- }
- if(subMeshIdx < 0 || subMeshIdx >= mSubMeshes.size())
- {
- CM_EXCEPT(InvalidParametersException, "Invalid sub-mesh index ("
- + toString(subMeshIdx) + "). Number of sub-meshes available: " + toString((int)mSubMeshes.size()));
- }
- return mSubMeshes[subMeshIdx];
- }
- UINT32 MeshBase::getNumSubMeshes() const
- {
- THROW_IF_CORE_THREAD;
- if(mSubMeshes.size() > 0)
- return (UINT32)mSubMeshes.size();
- else
- {
- if(mDefaultSubMesh.indexCount > 0)
- return 1;
- else
- return 0;
- }
- }
- /************************************************************************/
- /* SERIALIZATION */
- /************************************************************************/
- RTTITypeBase* MeshBase::getRTTIStatic()
- {
- return MeshBaseRTTI::instance();
- }
- RTTITypeBase* MeshBase::getRTTI() const
- {
- return MeshBase::getRTTIStatic();
- }
- }
|