void Flatten(Terrain terrain) { Undo.RegisterCompleteObjectUndo(terrain.terrainData, "Set Height - Flatten Tile"); var ctx = TerrainPaintUtility.BeginPaintHeightmap(terrain, new Rect(0, 0, terrain.terrainData.size.x, terrain.terrainData.size.z), 1); Material mat = GetPaintMaterial(); float terrainHeight = Mathf.Clamp01((m_TargetHeight - terrain.transform.position.y) / terrain.terrainData.size.y); Vector4 brushParams = new Vector4(0, 0.5f * terrainHeight, 0.0f, 0.0f); mat.SetVector("_BrushParams", brushParams); var size = terrain.terrainData.size; size.y = 0; var brushMask = RTUtils.GetTempHandle(ctx.sourceRenderTexture.width, ctx.sourceRenderTexture.height, 0, FilterUtility.defaultFormat); commonUI.GetBrushMask(terrain, ctx.sourceRenderTexture, brushMask, terrain.transform.position, Mathf.Min(size.x, size.z), 0f); // TODO(wyatt): need to handle seams mat.SetTexture("_FilterTex", brushMask); mat.SetTexture("_MainTex", ctx.sourceRenderTexture); Graphics.Blit(ctx.sourceRenderTexture, ctx.destinationRenderTexture, mat, 1); TerrainPaintUtility.EndPaintHeightmap(ctx, "Set Height - Flatten Tile"); RTUtils.Release(brushMask); PaintContext.ApplyDelayedActions(); }
public void Cleanup() { SceneView.duringSceneGui -= OnSceneGUI; Selection.activeObject = null; if (onPaintHistory != null) { onPaintHistory.Clear(); } // delete test resources commonUIInstance?.brushMaskFilterStack?.Clear(true); PaintContext.ApplyDelayedActions(); // apply before destroying terrain and terrainData if (terrainObj != null) { UnityEngine.Object.DestroyImmediate(terrainObj.terrainData); UnityEngine.Object.DestroyImmediate(terrainObj.gameObject); } // check Texture memory and RTHandle count // var currentTextureMemory = Texture.totalTextureMemory; // Assert.True(m_PrevTextureMemory == currentTextureMemory, $"Texture memory leak. Was {m_PrevTextureMemory} but is now {currentTextureMemory}. Diff = {currentTextureMemory - m_PrevTextureMemory}"); var currentRTHandlesCount = RTUtils.GetHandleCount(); Assert.True(m_PrevRTHandlesCount == RTUtils.GetHandleCount(), $"RTHandle leak. Was {m_PrevRTHandlesCount} but is now {currentRTHandlesCount}. Diff = {currentRTHandlesCount - m_PrevRTHandlesCount}"); }
public IEnumerator Test_PaintHeight_With_BrushMaskFilters_Playback(string recordingFilePath, string targetTerrainName) { yield return(null); InitTerrainTypesWithReflection("PaintHeightTool"); onPaintHistory = LoadDataFile(recordingFilePath); SetupTerrain(targetTerrainName); commonUIInstance.brushMaskFilterStack.Clear(true); var filterCount = FilterUtility.GetFilterTypeCount(); for (int i = 0; i < filterCount; ++i) { commonUIInstance.brushMaskFilterStack.Add(FilterUtility.CreateInstance(FilterUtility.GetFilterType(i))); } while (onPaintHistory.Count > 0) { // Force a SceneView update for OnSceneGUI to be triggered SceneView.RepaintAll(); PaintContext.ApplyDelayedActions(); yield return(null); } if (terrainObj.drawInstanced) { terrainObj.terrainData.SyncHeightmap(); } }
public void Cleanup() { // delete test resources defaultBrushUiGroupMock?.brushMaskFilterStack?.Clear(true); PaintContext.ApplyDelayedActions(); if (terrainObj != null) { UnityEngine.Object.DestroyImmediate(terrainObj.terrainData); UnityEngine.Object.DestroyImmediate(terrainObj.gameObject); } // check Texture memory and RTHandle count // var currentTextureMemory = Texture.totalTextureMemory; // Assert.True(m_PrevTextureMemory == currentTextureMemory, $"Texture memory leak. Was {m_PrevTextureMemory} but is now {currentTextureMemory}. Diff = {currentTextureMemory - m_PrevTextureMemory}"); var currentRTHandlesCount = RTUtils.GetHandleCount(); Assert.True(m_PrevRTHandlesCount == RTUtils.GetHandleCount(), $"RTHandle leak. Was {m_PrevRTHandlesCount} but is now {currentRTHandlesCount}. Diff = {currentRTHandlesCount - m_PrevRTHandlesCount}"); }
public static string[] OnWillSaveAssets(string[] paths) { PaintContext.ApplyDelayedActions(); return(paths); }