/// <summary>
        /// Ensures that the geometry buffers exist and have sufficient size.
        /// </summary>
        private void EnsureBuffers(ref ImDrawDataPtr drawDataPtr)
        {
            var dirty    = false;
            var vtxCount = 0;
            var idxCount = 0;

            for (var i = 0; i < drawDataPtr.CmdListsCount; i++)
            {
                var cmd = drawDataPtr.CmdListsRange[i];
                vtxCount = Math.Max(vtxCount, cmd.VtxBuffer.Size);
                idxCount = Math.Max(idxCount, cmd.IdxBuffer.Size);
            }

            if (vertexBuffer == null || vertexBuffer.VertexCount < vtxCount)
            {
                if (vertexBuffer != null)
                {
                    vertexBuffer.Dispose();
                }

                vertexBuffer = DynamicVertexBuffer.Create(ImGuiVertex.VertexDeclaration, vtxCount);
                dirty        = true;
            }

            if (indexBuffer == null || indexBuffer.IndexCount < idxCount)
            {
                if (indexBuffer != null)
                {
                    indexBuffer.Dispose();
                }

                indexBuffer = DynamicIndexBuffer.Create(IndexBufferElementType.Int16, idxCount);
                dirty       = true;
            }

            if (rasterizerState == null)
            {
                rasterizerState = RasterizerState.Create();
                rasterizerState.ScissorTestEnable = true;
            }

            if (geometryStream == null || dirty)
            {
                this.geometryStream = GeometryStream.Create();
                this.geometryStream.Attach(this.vertexBuffer);
                this.geometryStream.Attach(this.indexBuffer);
            }
        }