private static HelperSurfaceDescription GenerateHelperSurfaceDescription(GeneratedMeshes meshContainer, CSGModel model, ModelSettingsFlags modelSettings, GeneratedMeshDescription meshDescription, RenderSurfaceType renderSurfaceType)
        {
            HelperSurfaceDescription helperSurfaceDescription = MeshInstanceManager.CreateHelperSurfaceDescription(meshContainer, modelSettings, meshDescription, renderSurfaceType);

            helperSurfaceDescription.MeshDescription = meshDescription;
            if (!UpdateMesh(model, renderSurfaceMeshNames[(int)renderSurfaceType],
                            helperSurfaceDescription.MeshDescription,
                            helperSurfaceDescription.RenderSurfaceType,
                            ref helperSurfaceDescription.HasGeneratedNormals,
                            ref helperSurfaceDescription.SharedMesh,
                            editorOnly: true))
            {
                return(null);
            }
            return(helperSurfaceDescription);
        }
        private static bool TryGetHelperSurfaceDescription(GeneratedMeshes meshContainer, CSGModel model, ModelSettingsFlags modelSettings, GeneratedMeshDescription meshDescription, RenderSurfaceType renderSurfaceType, out HelperSurfaceDescription helperSurfaceDescription)
        {
            var startGetMeshInstanceTime = EditorApplication.timeSinceStartup;

            helperSurfaceDescription = MeshInstanceManager.GetHelperSurfaceDescription(meshContainer, modelSettings, meshDescription, renderSurfaceType);
            getMeshInstanceTime     += EditorApplication.timeSinceStartup - startGetMeshInstanceTime;
            if (helperSurfaceDescription != null &&
                meshDescription == helperSurfaceDescription.MeshDescription &&
                helperSurfaceDescription.SharedMesh &&
                helperSurfaceDescription.IsValid())
            {
                return(true);
            }
            helperSurfaceDescription = null;
            return(true);
        }
        private static GeneratedMeshInstance GenerateMeshInstance(GeneratedMeshes meshContainer, CSGModel model, ModelSettingsFlags modelSettings, GeneratedMeshDescription meshDescription, RenderSurfaceType renderSurfaceType, List <GameObject> unusedInstances)
        {
            GeneratedMeshInstance meshInstance = MeshInstanceManager.CreateMeshInstance(meshContainer, meshDescription, modelSettings, renderSurfaceType, unusedInstances);

            string baseName;

            switch (renderSurfaceType)
            {
            case RenderSurfaceType.Collider:    baseName = "Collider"; break;

            case RenderSurfaceType.Normal:      baseName = "Renderable"; break;

            default:                            baseName = "Unknown"; break;
            }

            meshInstance.MeshDescription = meshDescription;
            if (!UpdateMesh(model, baseName,
                            meshInstance.MeshDescription,
                            meshInstance.RenderSurfaceType,
                            ref meshInstance.HasGeneratedNormals,
                            ref meshInstance.SharedMesh))
            {
                return(null);
            }

            return(meshInstance);
        }
        private static bool TryGetMeshInstance(GeneratedMeshes meshContainer, CSGModel model, ModelSettingsFlags modelSettings, GeneratedMeshDescription meshDescription, RenderSurfaceType renderSurfaceType, out GeneratedMeshInstance meshInstance)
        {
            var startGetMeshInstanceTime = EditorApplication.timeSinceStartup;

            meshInstance         = MeshInstanceManager.GetMeshInstance(meshContainer, meshDescription, modelSettings, renderSurfaceType);
            getMeshInstanceTime += EditorApplication.timeSinceStartup - startGetMeshInstanceTime;
            if (meshInstance &&
                meshDescription == meshInstance.MeshDescription &&
                meshInstance.SharedMesh &&
                meshInstance.IsValid())
            {
                return(true);
            }

            meshInstance = null;
            return(true);
        }
        private static HelperSurfaceDescription GenerateHelperSurfaceDescription(GeneratedMeshes meshContainer, CSGModel model, ModelSettingsFlags modelSettings, GeneratedMeshDescription meshDescription, RenderSurfaceType renderSurfaceType)
        {
            HelperSurfaceDescription helperSurfaceDescription;

            var startGetMeshInstanceTime = EditorApplication.timeSinceStartup;

            {
                helperSurfaceDescription = MeshInstanceManager.GetHelperSurfaceDescription(meshContainer, modelSettings, meshDescription, renderSurfaceType);
            }
            getMeshInstanceTime += EditorApplication.timeSinceStartup - startGetMeshInstanceTime;
            if (meshDescription == helperSurfaceDescription.MeshDescription &&
                helperSurfaceDescription.SharedMesh &&
                helperSurfaceDescription.IsValid())
            {
                return(helperSurfaceDescription);
            }

            helperSurfaceDescription.MeshDescription = meshDescription;
            if (!UpdateMesh(model,
                            helperSurfaceDescription.MeshDescription,
                            helperSurfaceDescription.RenderSurfaceType,
                            ref helperSurfaceDescription.HasGeneratedNormals,
                            ref helperSurfaceDescription.SharedMesh))
            {
                return(null);
            }

            return(helperSurfaceDescription);
        }
        private static GeneratedMeshInstance GenerateMeshInstance(GeneratedMeshes meshContainer, CSGModel model, ModelSettingsFlags modelSettings, GeneratedMeshDescription meshDescription, RenderSurfaceType renderSurfaceType)
        {
            GeneratedMeshInstance meshInstance;

            var startGetMeshInstanceTime = EditorApplication.timeSinceStartup;

            {
                meshInstance = MeshInstanceManager.GetMeshInstance(meshContainer, meshDescription, modelSettings, renderSurfaceType);
                if (!meshInstance)
                {
                    return(null);
                }
            }

            getMeshInstanceTime += EditorApplication.timeSinceStartup - startGetMeshInstanceTime;
            if (meshDescription == meshInstance.MeshDescription &&
                meshInstance.SharedMesh &&
                meshInstance.IsValid())
            {
                return(meshInstance);
            }

            meshInstance.MeshDescription = meshDescription;
            if (!UpdateMesh(model,
                            meshInstance.MeshDescription,
                            meshInstance.RenderSurfaceType,
                            ref meshInstance.HasGeneratedNormals,
                            ref meshInstance.SharedMesh))
            {
                return(null);
            }

            return(meshInstance);
        }