public void DrawBackground()
        {
            IStyle style = currentElement.style;

            if (style.backgroundColor != Color.clear)
            {
                var painterParams = RectStylePainterParameters.GetDefault(currentElement);
                painterParams.border.SetWidth(0.0f);
                DrawRect(painterParams);
            }
        }
        public void DrawRect(RectStylePainterParameters painterParams)
        {
            var rect  = painterParams.rect;
            var color = painterParams.color;

            var m = currentElement.worldTransform;

            m_VertexData[m_VertexOffset + 0] = new Vertex()
            {
                Position = m.MultiplyPoint(new Vector2(rect.x, rect.y)), Tint = color, UV = Vector2.zero, TransformID = 0.0f, Flags = 0.0f
            };
            m_VertexData[m_VertexOffset + 1] = new Vertex()
            {
                Position = m.MultiplyPoint(new Vector2(rect.x + rect.width, rect.y)), Tint = color, UV = Vector2.zero, TransformID = 0.0f, Flags = 0.0f
            };
            m_VertexData[m_VertexOffset + 2] = new Vertex()
            {
                Position = m.MultiplyPoint(new Vector2(rect.x, rect.y + rect.height)), Tint = color, UV = Vector2.zero, TransformID = 0.0f, Flags = 0.0f
            };
            m_VertexData[m_VertexOffset + 3] = new Vertex()
            {
                Position = m.MultiplyPoint(new Vector2(rect.x + rect.width, rect.y + rect.height)), Tint = color, UV = Vector2.zero, TransformID = 0.0f, Flags = 0.0f
            };

            int vertexStride = m_VertexGPUBuffer.ElementStride;

            m_VertexUpdateRanges[m_VertexUpdateOffset] = new GfxUpdateBufferRange()
            {
                source = new UIntPtr(m_VertexData.Slice(m_VertexOffset, 4).GetUnsafeReadOnlyPtr()),
                offsetFromWriteStart = 0,
                size = 4 * (UInt32)vertexStride
            };
            m_VertexGPUBuffer.UpdateRanges(m_VertexUpdateRanges.Slice(m_VertexUpdateOffset, 1), m_VertexOffset * vertexStride, (m_VertexOffset + 4) * vertexStride);
            ++m_VertexUpdateOffset;

            m_IndexData[m_IndexOffset + 0] = (UInt16)(m_VertexOffset + 0);
            m_IndexData[m_IndexOffset + 1] = (UInt16)(m_VertexOffset + 1);
            m_IndexData[m_IndexOffset + 2] = (UInt16)(m_VertexOffset + 2);
            m_IndexData[m_IndexOffset + 3] = (UInt16)(m_VertexOffset + 2);
            m_IndexData[m_IndexOffset + 4] = (UInt16)(m_VertexOffset + 1);
            m_IndexData[m_IndexOffset + 5] = (UInt16)(m_VertexOffset + 3);

            int indexStride = m_IndexGPUBuffer.ElementStride;

            m_IndexUpdateRanges[m_IndexUpdateOffset] = new GfxUpdateBufferRange()
            {
                source = new UIntPtr(m_IndexData.Slice(m_IndexOffset, 6).GetUnsafeReadOnlyPtr()),
                offsetFromWriteStart = 0,
                size = 6 * (UInt32)indexStride
            };
            m_IndexGPUBuffer.UpdateRanges(m_IndexUpdateRanges.Slice(m_IndexUpdateOffset, 1), m_IndexOffset * indexStride, (m_IndexOffset + 6) * indexStride);
            ++m_IndexUpdateOffset;


            var drawRange = m_DrawRanges[m_DrawRangeCount];

            drawRange.firstIndex             = m_IndexOffset;
            drawRange.indexCount             = 6;
            drawRange.minIndexVal            = m_VertexOffset;
            drawRange.vertsReferenced        = 4;
            m_DrawRanges[m_DrawRangeCount++] = drawRange;

            m_VertexOffset += 4;
            m_IndexOffset  += 6;
        }