public void Values_Can_Be_Negative() { // setup float addValue = -10; var addFilter = FilterUtility.CreateInstance <AddFilter>(); addFilter.value = addValue; m_Stack.Add(addFilter); var prevRT = RenderTexture.active; var dest = RTUtils.GetTempHandle(RTUtils.GetDescriptor(1, 1, 0, GraphicsFormat.R16G16B16A16_SFloat, 0, false)); Graphics.Blit(Texture2D.blackTexture, dest); // init to black // eval m_Stack.Eval(m_Context, null, dest); // source isn't actually used yet var tex = new Texture2D(1, 1, TextureFormat.RGBAFloat, false, true); RenderTexture.active = dest; tex.ReadPixels(new Rect(0, 0, 1, 1), 0, 0, false); var check = tex.GetPixel(0, 0).r - 1; // minus 1 because we start off with a white texture within FilterStack.Eval // clean up RenderTexture.active = prevRT; UObject.DestroyImmediate(tex); RTUtils.Release(dest); Assert.That(check, Is.EqualTo(addValue)); }
public void Add_Filter() { // setup float addValue = 9000f; var addFilter = FilterUtility.CreateInstance <AddFilter>(); addFilter.value = addValue; var prevRT = RenderTexture.active; var src = RTUtils.GetTempHandle(RTUtils.GetDescriptor(1, 1, 0, GraphicsFormat.R16G16B16A16_SFloat, 0, false)); var dest = RTUtils.GetTempHandle(RTUtils.GetDescriptor(1, 1, 0, GraphicsFormat.R16G16B16A16_SFloat, 0, false)); Graphics.Blit(Texture2D.blackTexture, src); Graphics.Blit(Texture2D.blackTexture, dest); // eval addFilter.Eval(m_Context, src, dest); var tex = new Texture2D(1, 1, TextureFormat.RGBAFloat, false, true); RenderTexture.active = dest; tex.ReadPixels(new Rect(0, 0, 1, 1), 0, 0, false); var check = tex.GetPixel(0, 0).r; // clean up RenderTexture.active = prevRT; UObject.DestroyImmediate(tex); RTUtils.Release(src); RTUtils.Release(dest); UObject.DestroyImmediate(addFilter); Assert.That(check, Is.EqualTo(addValue)); }
public IEnumerator Test_PaintHeight_With_BrushMaskFilters_Playback(string recordingFilePath, string targetTerrainName) { yield return(null); SetupTerrain(); var startHeightArr = GetFullTerrainHeights(terrainObj); // test load up the terrain paint height brush var paintHeightTool = PaintHeightTool.instance; // need a way to override the common UI on the different tools so // that I can bypass some of their behaviors paintHeightTool.ChangeCommonUI(defaultBrushUiGroupMock); defaultBrushUiGroupMock.SetTerrain(terrainObj); defaultBrushUiGroupMock.brushMaskFilterStack.Clear(true); var filterCount = FilterUtility.GetFilterTypeCount(); for (int i = 0; i < filterCount; ++i) { defaultBrushUiGroupMock.brushMaskFilterStack.Add(FilterUtility.CreateInstance(FilterUtility.GetFilterType(i))); } RunPainting(recordingFilePath, paintHeightTool); }
public void Noise_Filter_Can_Be_Rotated(int dim) { var noiseFilter = FilterUtility.CreateInstance <NoiseFilter>(); noiseFilter.SetLocalSpace(true); m_Stack.Add(noiseFilter); var dest = RTUtils.GetTempHandle(RTUtils.GetDescriptor(dim, dim, 0, GraphicsFormat.R16G16B16A16_SFloat, 0, false)); Graphics.Blit(Texture2D.blackTexture, dest); // init to black m_Context.brushRotation = 0; m_Context.brushPos = Vector3.zero; m_Context.brushSize = dim; m_Stack.Eval(m_Context, null, dest); // source isn't actually used yet var unrotatedColors = GetColorsFromRT(dest); m_Context.brushRotation = 180; m_Stack.Eval(m_Context, null, dest); // source isn't actually used yet var rotatedColors = GetColorsFromRT(dest); RTUtils.Release(dest); int failureCount = 0; var difference = new Color[rotatedColors.Length]; for (int x = 0; x < dim; x++) { for (int y = 0; y < dim; y++) { int rotatedIndex = (dim - 1 - x) + (dim - 1 - y) * dim; var index = x + y * dim; difference[index] = new Color(Mathf.Abs(rotatedColors[rotatedIndex].r - unrotatedColors[index].r), 0, 0, 1); // comparing with a small value to eliminate issues coming from floating point offset if (Mathf.Abs(rotatedColors[rotatedIndex].r - unrotatedColors[index].r) > 0.001f) { failureCount++; } } } Assert.That(failureCount, Is.Zero); }