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

Function CreateJavaScene

engine/modelc/src/modelimporter_jni.cpp:485–546  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

483}
484
485static jobject CreateJavaScene(JNIEnv* env, const dmModelImporter::Scene* scene)
486{
487 dmLogDebug("CreateJavaScene: env = %p\n", env);
488 dmModelImporter::jni::ScopedContext jni_scope(env);
489 dmModelImporter::jni::TypeInfos* types = &jni_scope.m_TypeInfos;
490
491 jobject obj = env->AllocObject(types->m_SceneJNI.cls);
492
493 dmArray<jobject> models;
494 dmArray<jobject> skins;
495 dmArray<jobject> nodes;
496 dmArray<jobject> materials;
497 dmArray<jobject> roots;
498 dmHashTable64<jobject> object_cache;
499
500 dmJNI::SetObjectDeref(env, obj, types->m_SceneJNI.buffers, CreateBufferArray(env, types, scene->m_Buffers.Begin(), scene->m_Buffers.Size(), object_cache));
501
502 dmJNI::SetObjectDeref(env, obj, types->m_SceneJNI.images, CreateImagesArray(env, types, scene->m_Images.Size(), scene->m_Images.Begin(), object_cache));
503 dmJNI::SetObjectDeref(env, obj, types->m_SceneJNI.samplers, CreateSamplersArray(env, types, scene->m_Samplers.Size(), scene->m_Samplers.Begin(), object_cache));
504 dmJNI::SetObjectDeref(env, obj, types->m_SceneJNI.textures, CreateTexturesArray(env, types, scene->m_Textures.Size(), scene->m_Textures.Begin(), object_cache));
505
506 dmJNI::SetObjectDeref(env, obj, types->m_SceneJNI.materials, CreateMaterialsArray(env, types,
507 scene->m_Materials.Size(), scene->m_Materials.Begin(),
508 scene->m_DynamicMaterials.Size(), scene->m_DynamicMaterials.Begin(),
509 materials));
510
511
512 // Creates all nodes, but doesn't set setting skins/models
513 CreateNodes(env, types, scene, nodes);
514 CreateSkins(env, types, scene, skins);
515 CreateModels(env, types, scene, materials, models);
516 CreateBones(env, types, scene, skins, nodes, object_cache);
517
518 // Set the skin+model to the nodes
519 FixupNodeReferences(env, types, scene, skins, models, nodes);
520 FixupModelBones(env, types, scene, models, object_cache);
521
522 //env->EnsureLocalCapacity(8192); // TODO: Set this in the "C2J_Create*Array" functions
523
524 {
525 uint32_t count = scene->m_RootNodes.Size();
526 roots.SetCapacity(count);
527 for (uint32_t i = 0; i < count; ++i)
528 {
529 const dmModelImporter::Node* root = scene->m_RootNodes[i];
530 roots.Push(nodes[root->m_Index]);
531 }
532 }
533
534 dmJNI::SetObjectDeref(env, obj, types->m_SceneJNI.rootNodes, CreateObjectArray(env, types->m_NodeJNI.cls, roots));
535 dmJNI::SetObjectDeref(env, obj, types->m_SceneJNI.nodes, CreateObjectArray(env, types->m_NodeJNI.cls, nodes));
536 dmJNI::SetObjectDeref(env, obj, types->m_SceneJNI.skins, CreateObjectArray(env, types->m_SkinJNI.cls, skins));
537 dmJNI::SetObjectDeref(env, obj, types->m_SceneJNI.models, CreateObjectArray(env, types->m_ModelJNI.cls, models));
538 dmJNI::SetObjectDeref(env, obj, types->m_SceneJNI.animations, CreateAnimationsArray(env, types, scene->m_Animations.Begin(), scene->m_Animations.Size(), nodes));
539
540 DeleteLocalRefs(env, nodes);
541 DeleteLocalRefs(env, skins);
542 DeleteLocalRefs(env, models);

Callers 1

LoadFromBufferInternalFunction · 0.85

Calls 15

SetObjectDerefFunction · 0.85
CreateBufferArrayFunction · 0.85
CreateImagesArrayFunction · 0.85
CreateSamplersArrayFunction · 0.85
CreateTexturesArrayFunction · 0.85
CreateMaterialsArrayFunction · 0.85
CreateNodesFunction · 0.85
CreateSkinsFunction · 0.85
CreateModelsFunction · 0.85
CreateBonesFunction · 0.85
FixupNodeReferencesFunction · 0.85
FixupModelBonesFunction · 0.85

Tested by

no test coverage detected