public void Update(SceneView sceneView, CSGBrush[] brushes, ControlMesh[] controlMeshes, ControlMeshState[] meshStates) { if (brushes.Length == 0) { _outlinesManager.Clear(); _edgeColorsManager.Clear(); _polygonManager.Clear(); return; } _outlinesManager.Begin(); _edgeColorsManager.Begin(); _polygonManager.Begin(); for (var t = 0; t < brushes.Length; t++) { var brush = brushes[t]; if (!brush) { continue; } var meshState = meshStates[t]; if (meshState.WorldPoints.Length == 0 && meshState.Edges.Length == 0) { continue; } if (!meshState.UpdateColors(sceneView, brush, controlMeshes[t])) { continue; } _outlinesManager.DrawLines(meshState.WorldPoints, meshState.Edges, ColorSettings.MeshEdgeOutline, thickness: 1.0f); //, zTest: false); _edgeColorsManager.DrawLines(meshState.WorldPoints, meshState.Edges, meshState.EdgeColors, thickness: 1.0f); //, zTest: false); for (int p = 0; p < meshState.PolygonPointIndices.Length; p++) { if (meshState.PolygonColors[p].a < (1.0f / 255.0f)) { continue; } var color = meshState.PolygonColors[p]; var polygonPoints = meshState.PolygonPointIndices[p]; _polygonManager.DrawPolygon(meshState.WorldPoints, polygonPoints, color); } } _polygonManager.End(); _edgeColorsManager.End(); _outlinesManager.End(); }