bool ShouldRebuildStarLayer(string layerName, List <MaterialProperty> props) { StarRendererData data = GetDataForLayer(layerName); if (data == null) { Debug.LogError("Can't check if we should rebuild layer since there's no tracking data?!?"); return(false); } if (data.layerEnabled == false) { return(false); } // Check if density setting changed. MaterialProperty densityProp = GetPropertyWithName(props, "_StarLayer" + data.layerId + "Density"); if (densityProp.floatValue != data.density) { return(true); } MaterialProperty dataProp = GetPropertyWithName(props, "_StarLayer" + data.layerId + "DataTex"); if (dataProp != null && dataProp.textureValue == null) { return(true); } return(false); }
private void OnStarRenderingProgress(BaseStarDataRenderer renderer, float progress) { // Update the tracking data. StarRendererData data = starData[renderer]; data.progress = progress; // Update progress bar. EditorUtility.DisplayProgressBar(progressTitle, progressMessage, CalculateOverallRenderProgress()); }
void RenderStarSystem(List <MaterialProperty> props) { int renderCount = 0; // First flag everything that needs rendering (used for overall progress calculation). foreach (KeyValuePair <string, BaseStarDataRenderer> entry in renderers) { if (ShouldRebuildStarLayer(entry.Key, props)) { renderCount += 1; } } // If render count is 0, just rebuild everything. Else only build what needs it. foreach (KeyValuePair <string, BaseStarDataRenderer> entry in renderers) { StarRendererData starData = GetDataForLayer(entry.Key); if (renderCount == 0) { starData.isRendering = true; } else { starData.isRendering = ShouldRebuildStarLayer(entry.Key, props); } } UpdateAllTrackingData(props); // Render out the dirty items busyRenderingCount = 0; foreach (KeyValuePair <string, BaseStarDataRenderer> entry in renderers) { StarRendererData starData = GetDataForLayer(entry.Key); // Only render dirty frames if any.. if none.. let the user force rebuild the star system if they like. if (starData.isRendering) { entry.Value.imageSize = imageSize; entry.Value.density = starData.density; entry.Value.starRadius = starData.starRadius; busyRenderingCount += 1; EditorCoroutine.start(entry.Value.ComputeStarData()); } } }
// Refresh the tracking data for a star rendering layer. void UpdateStarRendererTrackingData(BaseStarDataRenderer renderer, string layerId, List <MaterialProperty> props) { StarRendererData data = null; if (starData.ContainsKey(renderer) == false) { data = new StarRendererData(); starData[renderer] = data; } else { data = starData[renderer]; } MaterialProperty densityProp = GetPropertyWithName(props, "_StarLayer" + layerId + "Density"); data.density = densityProp.floatValue; data.name = "Star layer " + layerId; data.layerId = layerId; data.progress = 0; }
private void OnStarRenderingComplete(BaseStarDataRenderer renderer, Texture2D texture, bool success) { StarRendererData data = starData[renderer]; texture.name = data.layerId; texture.filterMode = FilterMode.Point; texture.wrapMode = TextureWrapMode.Clamp; RemoveAllObjectsWithName(data.layerId, material); AddObjectToMaterial(texture, material); // Update the material with the new texture file. material.SetTexture("_StarLayer" + data.layerId + "DataTex", texture); busyRenderingCount -= 1; if (busyRenderingCount <= 0) { // Hide our progress bar. EditorUtility.ClearProgressBar(); } }
// Appends an identifiier for the star data file names. private string FileNameForRendererData(BaseStarDataRenderer renderer, string prefix, string ext) { StarRendererData data = starData[renderer]; return(prefix + data.layerId + "." + ext); }