void layoutBuffers(Span <sDrawCall> drawCallsSpan) { buffersLayout.clear(); for (int i = 0; i < drawCallsSpan.Length; i++) { ref var dc = ref drawCallsSpan[i]; int sn = dc.order.sn; if (sn >= 0) { buffersLayout.addMesh(i, drawMeshes.meshes[sn].mesh.meshInfo); continue; } sn = -sn - 1; if (dc.drawCall.mesh == eMesh.SpriteRectangle) { sMeshDataSize mds = new sMeshDataSize(SpriteMesh.countVertices, SpriteMesh.countTriangles); buffersLayout.addTransparent(i, ref mds); continue; } if (dc.drawCall.isText) { // Glyph runs can be either opaque or transparent, depending on text background sMeshDataSize mds = drawMeshes.textCommands[sn].meshDataSize; buffersLayout.addTransparent(i, ref mds); continue; } sDrawRectCommand cmd = drawMeshes.rectCommands[sn]; sMeshDataSize size; if (cmd.strokeWidth.HasValue) { size = RectangleMesh.sizeStroked; } else { size = RectangleMesh.sizeFilled; } buffersLayout.addOpaque(i, ref size); }
/// <summary>Creates a D2D mesh from a pair of readonly spans</summary> public static id2Mesh createMesh(this iDrawDevice device, ReadOnlySpan <Vector2> vertices, ReadOnlySpan <ushort> indices) { sMeshDataSize mds = new sMeshDataSize(vertices.Length, indices.Length / 3); return(device.createMesh(ref MemoryMarshal.GetReference(vertices), ref MemoryMarshal.GetReference(indices), mds)); }