MCPcopy Create free account
hub / github.com/Illation/ETEngine / OpenBufferViewReader

Method OpenBufferViewReader

Engine/source/EtRendering/SceneStructure/GLTF.cpp:1218–1259  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1216}
1217
1218bool glTF::OpenBufferViewReader(glTFAsset& asset, uint32 viewIdx, core::BinaryReader* pViewReader)
1219{
1220 if (viewIdx >= (int32)asset.dom.bufferViews.size())
1221 {
1222 LOG("BufferView index out of range", core::LogLevel::Warning);
1223 return false;
1224 }
1225 BufferView& view = asset.dom.bufferViews[viewIdx];
1226 if (view.buffer >= (uint32)asset.dom.buffers.size())
1227 {
1228 LOG("Buffer index out of range", core::LogLevel::Warning);
1229 return false;
1230 }
1231 Buffer& buffer = asset.dom.buffers[view.buffer];
1232 if (buffer.uri.type == URI::URI_UNEVALUATED)
1233 {
1234 if (!EvaluateURI(buffer.uri, asset.basePath))
1235 {
1236 LOG("Failed to evaluate buffer URI", core::LogLevel::Warning);
1237 return false;
1238 }
1239 }
1240 if (buffer.uri.type == URI::URI_NONE)
1241 {
1242 if (view.buffer >= (uint32)asset.dataChunks.size())
1243 {
1244 LOG("No data chunk loaded for glb buffer", core::LogLevel::Warning);
1245 return false;
1246 }
1247 pViewReader->Open(asset.dataChunks[view.buffer].chunkData, (uint32)view.byteOffset, (uint32)view.byteLength);
1248 }
1249 else
1250 {
1251 pViewReader->Open(buffer.uri.binData, (uint32)view.byteOffset, (uint32)view.byteLength);
1252 }
1253 if (!pViewReader->Exists())
1254 {
1255 LOG("glTF Failed to read the buffer view!", core::LogLevel::Warning);
1256 return false;
1257 }
1258 return true;
1259}
1260
1261bool glTF::GetAccessorData(glTFAsset& asset, uint32 idx, std::vector<uint8>& data)
1262{

Callers

nothing calls this directly

Calls 2

OpenMethod · 0.45
ExistsMethod · 0.45

Tested by

no test coverage detected