MCPcopy Create free account
hub / github.com/OGRECave/ogre / readSubMesh

Method readSubMesh

OgreMain/src/OgreMeshSerializerImpl.cpp:894–1012  ·  view source on GitHub ↗

---------------------------------------------------------------------

Source from the content-addressed store, hash-verified

892 }
893 //---------------------------------------------------------------------
894 void MeshSerializerImpl::readSubMesh(const DataStreamPtr& stream, Mesh* pMesh, MeshSerializerListener *listener)
895 {
896 unsigned short streamID;
897
898 SubMesh* sm = pMesh->createSubMesh();
899
900 // char* materialName
901 String materialName = readString(stream);
902 if(listener)
903 listener->processMaterialName(pMesh, &materialName);
904 if (auto material = MaterialManager::getSingleton().getByName(materialName, pMesh->getGroup()))
905 {
906 sm->setMaterial(material);
907 }
908 else
909 {
910 logMaterialNotFound(materialName, pMesh->getGroup(), "SubMesh of", pMesh->getName(), LML_WARNING);
911 }
912
913 // bool useSharedVertices
914 readBools(stream,&sm->useSharedVertices, 1);
915
916 sm->indexData->indexStart = 0;
917 unsigned int indexCount = 0;
918 readInts(stream, &indexCount, 1);
919 sm->indexData->indexCount = indexCount;
920
921 HardwareIndexBufferSharedPtr ibuf;
922 // bool indexes32Bit
923 bool idx32bit;
924 readBools(stream, &idx32bit, 1);
925 if (indexCount > 0)
926 {
927 if (idx32bit)
928 {
929 ibuf = pMesh->getHardwareBufferManager()->createIndexBuffer(
930 HardwareIndexBuffer::IT_32BIT,
931 sm->indexData->indexCount,
932 pMesh->mIndexBufferUsage,
933 pMesh->mIndexBufferShadowBuffer);
934 HardwareBufferLockGuard ibufLock(ibuf, HardwareBuffer::HBL_DISCARD);
935 readInts(stream, static_cast<unsigned int*>(ibufLock.pData), sm->indexData->indexCount);
936
937 }
938 else // 16-bit
939 {
940 ibuf = pMesh->getHardwareBufferManager()->createIndexBuffer(
941 HardwareIndexBuffer::IT_16BIT,
942 sm->indexData->indexCount,
943 pMesh->mIndexBufferUsage,
944 pMesh->mIndexBufferShadowBuffer);
945 HardwareBufferLockGuard ibufLock(ibuf, HardwareBuffer::HBL_DISCARD);
946 readShorts(stream, static_cast<unsigned short*>(ibufLock.pData), sm->indexData->indexCount);
947 }
948 }
949 sm->indexData->indexBuffer = ibuf;
950
951 pushInnerChunk(stream);

Callers

nothing calls this directly

Calls 10

logMaterialNotFoundFunction · 0.85
logErrorMethod · 0.80
createSubMeshMethod · 0.45
processMaterialNameMethod · 0.45
getByNameMethod · 0.45
setMaterialMethod · 0.45
getNameMethod · 0.45
createIndexBufferMethod · 0.45
eofMethod · 0.45

Tested by

no test coverage detected