internal void Clear()
        {
            if (m_instanceBuffer != null)
            {
                m_instanceBuffer.Release();
            }

            m_instanceBuffer = null;
        }
        internal unsafe void Transfer()
        {
            var array = m_perInstance.ToArray();

            fixed(void *ptr = array)
            {
                var intPtr = new IntPtr(ptr);

                m_instanceBuffer = new MyStructuredBuffer(m_perInstance.Count, sizeof(MyPerInstanceData), ResourceUsage.Default, CpuAccessFlags.None, intPtr);
            }
        }
        internal override unsafe void SendToGpu()
        {
            {
                var array = m_pageTable.ToArray();

                fixed(void *ptr = array)
                {
                    var intPtr = new IntPtr(ptr);

                    m_indirectionBuffer = new MyStructuredBuffer(m_pageTable.Count, sizeof(MyInstancingTableEntry), ResourceUsage.Default, CpuAccessFlags.None, intPtr);
                }
            }
            {
                var array = m_perInstance.ToArray();

                fixed(void *ptr = array)
                {
                    var intPtr = new IntPtr(ptr);

                    m_instanceBuffer = new MyStructuredBuffer(m_perInstance.Count, sizeof(MyPerInstanceData), ResourceUsage.Default, CpuAccessFlags.None, intPtr);
                }
            }
            {
                var array = m_indicesList.ToArray();

                fixed(void *ptr = array)
                {
                    var intPtr = new IntPtr(ptr);

                    m_indicesBuffer = new MyStructuredBuffer(m_indicesList.Count, sizeof(uint), ResourceUsage.Default, CpuAccessFlags.None, intPtr);
                }
            }
            {
                var array = m_vertexPositionList.ToArray();

                fixed(void *ptr = array)
                {
                    var intPtr = new IntPtr(ptr);

                    m_vertexPositionBuffer = new MyStructuredBuffer(m_vertexPositionList.Count, sizeof(MyVertexFormatPositionHalf4), ResourceUsage.Default, CpuAccessFlags.None, intPtr);
                }
            }
            {
                var array = m_vertexNormalList.ToArray();

                fixed(void *ptr = array)
                {
                    var intPtr = new IntPtr(ptr);

                    m_vertexNormalBuffer = new MyStructuredBuffer(m_vertexNormalList.Count, sizeof(MyVertexFormatTexcoordNormalTangent), ResourceUsage.Default, CpuAccessFlags.None, intPtr);
                }
            }
        }
        internal void Release()
        {
            if (m_VB_positions != null)
            {
                m_VB_positions.Release();
                m_VB_rest.Release();
                m_IB.Release();
            }

            m_VB_positions = null;
            m_VB_rest      = null;
            m_IB           = null;
        }
        internal override void Clear()
        {
            if (m_indirectionBuffer != null)
            {
                m_indirectionBuffer.Release();
                m_instanceBuffer.Release();
                m_vertexPositionBuffer.Release();
                m_vertexNormalBuffer.Release();
            }

            m_indirectionBuffer    = null;
            m_instanceBuffer       = null;
            m_vertexPositionBuffer = null;
            m_vertexNormalBuffer   = null;
        }
        internal unsafe void Transfer()
        {
            var array = m_perInstance.ToArray();

            fixed (void* ptr = array)
            {
                var intPtr = new IntPtr(ptr);
                m_instanceBuffer = new MyStructuredBuffer(m_perInstance.Count, sizeof(MyPerInstanceData), ResourceUsage.Default, CpuAccessFlags.None, intPtr);
            }
        }
 internal unsafe void MoveToGPU()
 {
     m_VB_positions = new MyStructuredBuffer(m_vertexPositionList.Count, sizeof(MyVertexFormatPositionHalf4), ResourceUsage.Default, CpuAccessFlags.None);
     m_VB_rest      = new MyStructuredBuffer(m_vertexList.Count, sizeof(MyVertexFormatTexcoordNormalTangent), ResourceUsage.Default, CpuAccessFlags.None);
     m_IB           = new MyStructuredBuffer(m_indicesList.Count, sizeof(uint), ResourceUsage.Default, CpuAccessFlags.None);
 }
        internal void Clear()
        {
            if (m_instanceBuffer != null)
            {
                m_instanceBuffer.Release();
            }

            m_instanceBuffer = null;
        }
        internal override unsafe void SendToGpu()
        {
            {
                var array = m_pageTable.ToArray();

                fixed (void* ptr = array)
                {
                    var intPtr = new IntPtr(ptr);
                    m_indirectionBuffer = new MyStructuredBuffer(m_pageTable.Count, sizeof(MyInstancingTableEntry), ResourceUsage.Default, CpuAccessFlags.None, intPtr);
                }
            }
            {
                var array = m_perInstance.ToArray();

                fixed (void* ptr = array)
                {
                    var intPtr = new IntPtr(ptr);
                    m_instanceBuffer = new MyStructuredBuffer(m_perInstance.Count, sizeof(MyPerInstanceData), ResourceUsage.Default, CpuAccessFlags.None, intPtr);
                }
            }
            {
                var array = m_indicesList.ToArray();

                fixed (void* ptr = array)
                {
                    var intPtr = new IntPtr(ptr);
                    m_indicesBuffer = new MyStructuredBuffer(m_indicesList.Count, sizeof(uint), ResourceUsage.Default, CpuAccessFlags.None, intPtr);
                }
            }
            {
                var array = m_vertexPositionList.ToArray();

                fixed (void* ptr = array)
                {
                    var intPtr = new IntPtr(ptr);
                    m_vertexPositionBuffer = new MyStructuredBuffer(m_vertexPositionList.Count, sizeof(MyVertexFormatPositionHalf4), ResourceUsage.Default, CpuAccessFlags.None, intPtr);
                }
            }
            {
                var array = m_vertexNormalList.ToArray();

                fixed (void* ptr = array)
                {
                    var intPtr = new IntPtr(ptr);
                    m_vertexNormalBuffer = new MyStructuredBuffer(m_vertexNormalList.Count, sizeof(MyVertexFormatTexcoordNormalTangent), ResourceUsage.Default, CpuAccessFlags.None, intPtr);
                }
            }
        }
        internal override void Clear()
        {
            if (m_indirectionBuffer != null)
            {
                m_indirectionBuffer.Release();
                m_instanceBuffer.Release();
                m_indicesBuffer.Release();
                m_vertexPositionBuffer.Release();
                m_vertexNormalBuffer.Release();
            }

            m_indirectionBuffer = null;
            m_instanceBuffer = null;
            m_indicesBuffer = null;
            m_vertexPositionBuffer = null;
            m_vertexNormalBuffer = null;
        }
        internal void Release()
        {
            if(m_VB_positions != null)
            {
                m_VB_positions.Release();
                m_VB_rest.Release();
                m_IB.Release();
            }

            m_VB_positions = null;
            m_VB_rest = null;
            m_IB = null;
        }
 internal unsafe void MoveToGPU()
 {
     m_VB_positions = new MyStructuredBuffer(m_vertexPositionList.Count, sizeof(MyVertexFormatPositionHalf4), ResourceUsage.Default, CpuAccessFlags.None);
     m_VB_rest = new MyStructuredBuffer(m_vertexList.Count, sizeof(MyVertexFormatTexcoordNormalTangent), ResourceUsage.Default, CpuAccessFlags.None);
     m_IB = new MyStructuredBuffer(m_indicesList.Count, sizeof(uint), ResourceUsage.Default, CpuAccessFlags.None);
 }