/// <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); } }