コード例 #1
0
        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();
        }