/// <summary> /// Reads the unmanaged data from the native value. /// </summary> /// <param name="nativeValue">Input native value</param> void IMarshalable <Node, AiNode> .FromNative(ref AiNode nativeValue) { m_name = nativeValue.Name.GetString(); m_transform = nativeValue.Transformation; m_parent = null; m_children.Clear(); m_meshes.Clear(); m_metaData.Clear(); if (nativeValue.MetaData != IntPtr.Zero) { Metadata data = MemoryHelper.FromNativePointer <Metadata, AiMetadata>(nativeValue.MetaData); foreach (KeyValuePair <String, Metadata.Entry> kv in data) { m_metaData.Add(kv.Key, kv.Value); } } if (nativeValue.NumMeshes > 0 && nativeValue.Meshes != IntPtr.Zero) { m_meshes.AddRange(MemoryHelper.FromNativeArray <int>(nativeValue.Meshes, (int)nativeValue.NumMeshes)); } if (nativeValue.NumChildren > 0 && nativeValue.Children != IntPtr.Zero) { m_children.AddRange(MemoryHelper.FromNativeArray <Node, AiNode>(nativeValue.Children, (int)nativeValue.NumChildren, true)); } }
/// <summary> /// Marshals an unmanaged scene to managed memory. This does not free the unmanaged memory. /// </summary> /// <param name="scenePtr">The unmanaged scene data</param> /// <returns>The managed scene, or null if the pointer is NULL</returns> public static Scene FromUnmanagedScene(IntPtr scenePtr) { if (scenePtr == IntPtr.Zero) { return(null); } return(MemoryHelper.FromNativePointer <Scene, AiScene>(scenePtr)); }
/// <summary> /// Reads the unmanaged data from the native value. /// </summary> /// <param name="nativeValue">Input native value</param> void IMarshalable <Scene, AiScene> .FromNative(ref AiScene nativeValue) { Clear(); m_flags = nativeValue.Flags; //Read materials if (nativeValue.NumMaterials > 0 && nativeValue.Materials != IntPtr.Zero) { m_materials.AddRange(MemoryHelper.FromNativeArray <Material, AiMaterial>(nativeValue.Materials, (int)nativeValue.NumMaterials, true)); } //Read scenegraph if (nativeValue.RootNode != IntPtr.Zero) { m_rootNode = MemoryHelper.FromNativePointer <Node, AiNode>(nativeValue.RootNode); } //Read meshes if (nativeValue.NumMeshes > 0 && nativeValue.Meshes != IntPtr.Zero) { m_meshes.AddRange(MemoryHelper.FromNativeArray <Mesh, AiMesh>(nativeValue.Meshes, (int)nativeValue.NumMeshes, true)); } //Read lights if (nativeValue.NumLights > 0 && nativeValue.Lights != IntPtr.Zero) { m_lights.AddRange(MemoryHelper.FromNativeArray <Light, AiLight>(nativeValue.Lights, (int)nativeValue.NumLights, true)); } //Read cameras if (nativeValue.NumCameras > 0 && nativeValue.Cameras != IntPtr.Zero) { m_cameras.AddRange(MemoryHelper.FromNativeArray <Camera, AiCamera>(nativeValue.Cameras, (int)nativeValue.NumCameras, true)); } //Read textures if (nativeValue.NumTextures > 0 && nativeValue.Textures != IntPtr.Zero) { m_textures.AddRange(MemoryHelper.FromNativeArray <EmbeddedTexture, AiTexture>(nativeValue.Textures, (int)nativeValue.NumTextures, true)); } //Read animations if (nativeValue.NumAnimations > 0 && nativeValue.Animations != IntPtr.Zero) { m_animations.AddRange(MemoryHelper.FromNativeArray <Animation, AiAnimation>(nativeValue.Animations, (int)nativeValue.NumAnimations, true)); } }