Example #1
0
        /// <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));
            }
        }
Example #2
0
        /// <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));
        }
Example #3
0
        /// <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));
            }
        }