MCPcopy Create free account
hub / github.com/defold/defold / LoadGltfFromBuffer

Function LoadGltfFromBuffer

engine/modelc/src/modelimporter_gltf.cpp:2073–2129  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2071}
2072
2073Scene* LoadGltfFromBuffer(Options* importeroptions, void* mem, uint32_t file_size)
2074{
2075 cgltf_options options;
2076 memset(&options, 0, sizeof(cgltf_options));
2077
2078 cgltf_data* data = NULL;
2079 cgltf_result result = cgltf_parse(&options, (uint8_t*)mem, file_size, &data);
2080
2081 if (result != cgltf_result_success)
2082 {
2083 printf("Failed to load gltf file: %s (%d)\n", GetResultStr(result), result);
2084 return 0;
2085 }
2086
2087 CreateNames(&options, data);
2088
2089 // resolve as many buffers as possible
2090 result = ResolveBuffers(&options, data, 0);
2091 if (result != cgltf_result_success)
2092 {
2093 printf("Failed to load gltf buffers: %s (%d)\n", GetResultStr(result), result);
2094 cgltf_free(data);
2095 return 0;
2096 }
2097
2098 Scene* scene = new Scene;
2099 memset(scene, 0, sizeof(Scene));
2100 GltfData* scenedata = new GltfData;
2101 scenedata->m_Data = data;
2102
2103 scene->m_OpaqueSceneData = scenedata;
2104 scene->m_LoadFinalizeFn = LoadFinalizeGltf;
2105 scene->m_ValidateFn = ValidateGltf;
2106 scene->m_DestroyFn = DestroyGltf;
2107
2108 InitSize(scene->m_Buffers, data->buffers_count, data->buffers_count);
2109
2110 for (cgltf_size i = 0; i < data->buffers_count; ++i)
2111 {
2112 scene->m_Buffers[i].m_Uri = DuplicateObjectName(&data->buffers[i]);
2113 scene->m_Buffers[i].m_Buffer = (uint8_t*)data->buffers[i].data;
2114 scene->m_Buffers[i].m_BufferCount = data->buffers[i].size;
2115 }
2116
2117 if (!NeedsResolve(scene))
2118 {
2119 scene->m_LoadFinalizeFn = 0;
2120 if (!LoadFinalizeGltf(scene))
2121 {
2122 ClearScene(scene);
2123 return scene;
2124 }
2125 ValidateGltf(scene);
2126 }
2127
2128 return scene;
2129}
2130

Callers 1

LoadFromBufferFunction · 0.85

Calls 11

cgltf_parseFunction · 0.85
GetResultStrFunction · 0.85
CreateNamesFunction · 0.85
ResolveBuffersFunction · 0.85
cgltf_freeFunction · 0.85
InitSizeFunction · 0.85
DuplicateObjectNameFunction · 0.85
NeedsResolveFunction · 0.85
LoadFinalizeGltfFunction · 0.85
ClearSceneFunction · 0.85
ValidateGltfFunction · 0.85

Tested by

no test coverage detected