//********************************** Banshee Engine (www.banshee3d.com) **************************************************// //**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************// using System; using System.Runtime.CompilerServices; namespace BansheeEngine { /** @addtogroup Rendering * @{ */ /// /// Renderable represents any visible object in the scene. It has a mesh, bounds and a set of materials. Renderer will /// render any Renderable objects visible by a camera. /// [RunInEditor] public sealed class Renderable2 : Component { /// /// Mesh to render. /// public Mesh Mesh { get { return Internal_GetMesh(mCachedPtr); } set { IntPtr meshPtr = IntPtr.Zero; if (value != null) meshPtr = value.GetCachedPtr(); Internal_SetMesh(mCachedPtr, meshPtr); } } /// /// Material to use when rendering the mesh. If the mesh contains multiple sub-meshes then you may set individual /// materials for each sub-mesh. /// public Material Material { get { return Internal_GetMaterial(mCachedPtr, 0); } set { IntPtr materialPtr = IntPtr.Zero; if (value != null) materialPtr = value.GetCachedPtr(); Internal_SetMaterial(mCachedPtr, materialPtr, 0); } } /// /// Materials to use when rendering the mesh. /// public Material[] Materials { get { return Internal_GetMaterials(mCachedPtr); } set { Internal_SetMaterials(mCachedPtr, value); } } /// /// Returns a material for a specific sub-mesh. /// /// Index of the sub-mesh. /// Material used for rendering the sub-mesh at the specified index. public Material GetMaterial(int index = 0) { return Internal_GetMaterial(mCachedPtr, index); } /// /// Sets a material for a specific sub-mesh. /// /// Material to use for rendering the sub-mesh at the specified index. /// Index of the sub-mesh. public void SetMaterial(Material material, int index = 0) { IntPtr materialPtr = IntPtr.Zero; if (material != null) materialPtr = material.GetCachedPtr(); Internal_SetMaterial(mCachedPtr, materialPtr, index); } /// /// Layer bitfield that controls whether a renderable is considered visible in a specific camera. Renderable layer /// must match camera layer in order for the camera to render the component. /// public UInt64 Layers { get { return Internal_GetLayers(mCachedPtr); } set { Internal_SetLayers(mCachedPtr, value); } } /// /// Gets world bounds of the mesh rendered by this object. /// public Bounds Bounds { get { AABox box; Sphere sphere; Internal_GetBounds(mCachedPtr, out box, out sphere); return new Bounds(box, sphere); } } [MethodImpl(MethodImplOptions.InternalCall)] private static extern Mesh Internal_GetMesh(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetMesh(IntPtr thisPtr, IntPtr mesh); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_GetBounds(IntPtr thisPtr, out AABox box, out Sphere sphere); [MethodImpl(MethodImplOptions.InternalCall)] private static extern UInt64 Internal_GetLayers(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetLayers(IntPtr thisPtr, UInt64 layers); [MethodImpl(MethodImplOptions.InternalCall)] private static extern Material Internal_GetMaterial(IntPtr thisPtr, int index); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetMaterial(IntPtr thisPtr, IntPtr material, int index); [MethodImpl(MethodImplOptions.InternalCall)] private static extern Material[] Internal_GetMaterials(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetMaterials(IntPtr thisPtr, Material[] materials); } /** @} */ }