------------------------------------------------------------------------------------------------ Get the memory requirements of the scene
| 1177 | // ------------------------------------------------------------------------------------------------ |
| 1178 | // Get the memory requirements of the scene |
| 1179 | void Importer::GetMemoryRequirements(aiMemoryInfo& in) const { |
| 1180 | ai_assert(nullptr != pimpl); |
| 1181 | |
| 1182 | in = aiMemoryInfo(); |
| 1183 | aiScene* mScene = pimpl->mScene; |
| 1184 | |
| 1185 | // return if we have no scene loaded |
| 1186 | if (!mScene) |
| 1187 | return; |
| 1188 | |
| 1189 | in.total = sizeof(aiScene); |
| 1190 | |
| 1191 | // add all meshes |
| 1192 | for (unsigned int i = 0; i < mScene->mNumMeshes;++i) { |
| 1193 | in.meshes += sizeof(aiMesh); |
| 1194 | if (mScene->mMeshes[i]->HasPositions()) { |
| 1195 | in.meshes += sizeof(aiVector3D) * mScene->mMeshes[i]->mNumVertices; |
| 1196 | } |
| 1197 | |
| 1198 | if (mScene->mMeshes[i]->HasNormals()) { |
| 1199 | in.meshes += sizeof(aiVector3D) * mScene->mMeshes[i]->mNumVertices; |
| 1200 | } |
| 1201 | |
| 1202 | if (mScene->mMeshes[i]->HasTangentsAndBitangents()) { |
| 1203 | in.meshes += sizeof(aiVector3D) * mScene->mMeshes[i]->mNumVertices * 2; |
| 1204 | } |
| 1205 | |
| 1206 | for (unsigned int a = 0; a < AI_MAX_NUMBER_OF_COLOR_SETS;++a) { |
| 1207 | if (mScene->mMeshes[i]->HasVertexColors(a)) { |
| 1208 | in.meshes += sizeof(aiColor4D) * mScene->mMeshes[i]->mNumVertices; |
| 1209 | } else { |
| 1210 | break; |
| 1211 | } |
| 1212 | } |
| 1213 | for (unsigned int a = 0; a < AI_MAX_NUMBER_OF_TEXTURECOORDS;++a) { |
| 1214 | if (mScene->mMeshes[i]->HasTextureCoords(a)) { |
| 1215 | in.meshes += sizeof(aiVector3D) * mScene->mMeshes[i]->mNumVertices; |
| 1216 | } else { |
| 1217 | break; |
| 1218 | } |
| 1219 | } |
| 1220 | if (mScene->mMeshes[i]->HasBones()) { |
| 1221 | in.meshes += sizeof(void*) * mScene->mMeshes[i]->mNumBones; |
| 1222 | for (unsigned int p = 0; p < mScene->mMeshes[i]->mNumBones;++p) { |
| 1223 | in.meshes += sizeof(aiBone); |
| 1224 | in.meshes += mScene->mMeshes[i]->mBones[p]->mNumWeights * sizeof(aiVertexWeight); |
| 1225 | } |
| 1226 | } |
| 1227 | in.meshes += (sizeof(aiFace) + 3 * sizeof(unsigned int))*mScene->mMeshes[i]->mNumFaces; |
| 1228 | } |
| 1229 | in.total += in.meshes; |
| 1230 | |
| 1231 | // add all embedded textures |
| 1232 | for (unsigned int i = 0; i < mScene->mNumTextures;++i) { |
| 1233 | const aiTexture* pc = mScene->mTextures[i]; |
| 1234 | in.textures += sizeof(aiTexture); |
| 1235 | if (pc->mHeight) { |
| 1236 | in.textures += 4 * pc->mHeight * pc->mWidth; |
no test coverage detected