private void DoIteration() { int n4 = N / 4; int n8 = n4 / 2; Iteraition.Dispatch(mIterationKernelId, n4, n4, n4); Copy.Dispatch(mCopyKernelId, n8, n8, n8); }
public IEnumerator InitModel() { RenTexture = new RenderTexture(N, N, 24, RenderTextureFormat.RFloat) { enableRandomWrite = true, volumeDepth = N, dimension = UnityEngine.Rendering.TextureDimension.Tex3D, filterMode = FilterMode.Point, wrapMode = TextureWrapMode.Clamp }; RenTexture.Create(); Buffer = new RenderTexture(N, N, 24, RenderTextureFormat.RFloat) { enableRandomWrite = true, volumeDepth = N, dimension = UnityEngine.Rendering.TextureDimension.Tex3D, filterMode = FilterMode.Point, wrapMode = TextureWrapMode.Clamp }; Buffer.Create(); Display = new RenderTexture(N, N, 24, RenderTextureFormat.RFloat) { enableRandomWrite = true, volumeDepth = N, dimension = UnityEngine.Rendering.TextureDimension.Tex3D, filterMode = FilterMode, wrapMode = TextureWrapMode.Clamp }; Display.Create(); yield return(new WaitForSeconds(1)); PlaneMaterial.SetTexture("_MainTex", Display); PlaneMaterial.SetFloat("_MaxValue", StartPotential); var initKernelId = Init.FindKernel("CSMain"); Init.SetTexture(initKernelId, "_Result", RenTexture); Init.SetFloat("_InitialValue", StartPotential); Init.SetFloat("_NodesCount", N); mFigures = mTree.GetComponentsInChildren <Figure>(); mFiguresCount = mFigures.Length; //Init.SetInt("_MaxStep", mMaxSteps); //Init.SetFloat("_MaxDist", MaxDistance); Init.SetInt("_FiguresCount", mFiguresCount); mBuffer = new ComputeBuffer(mFiguresCount, 132); var data = mFigures.Select((x) => new ShaderFigure { Type = (int)x.Type, Matr = x.transform.worldToLocalMatrix, Params = x.Params }).ToArray(); mBuffer.SetData(data); Init.SetBuffer(initKernelId, "_Figures", mBuffer); var n4 = N / 4; Init.Dispatch(initKernelId, n4, n4, n4); //buffer.Dispose(); yield return(new WaitForSeconds(1)); mIterationKernelId = Iteraition.FindKernel("CSMain"); Iteraition.SetTexture(mIterationKernelId, "_Source", RenTexture); Iteraition.SetTexture(mIterationKernelId, "_Result", Buffer); mIterationHardKernelId = IterationHard.FindKernel("CSMain"); IterationHard.SetTexture(mIterationKernelId, "_Source", RenTexture); IterationHard.SetTexture(mIterationKernelId, "_Result", Buffer); IterationHard.SetFloat("_InitialValue", StartPotential); IterationHard.SetFloat("_NodesCount", N); IterationHard.SetInt("_MaxStep", MaxSteps); IterationHard.SetFloat("_Dist", 1f / (N - 1)); //IterationHard.SetFloat("_MaxDist", MaxDistance); IterationHard.SetInt("_FiguresCount", mFiguresCount); IterationHard.SetBuffer(mIterationHardKernelId, "_Figures", mBuffer); mCopyKernelId = Copy.FindKernel("CSMain"); Copy.SetTexture(mCopyKernelId, "_Source", Buffer); Copy.SetTexture(mCopyKernelId, "_Result", RenTexture); Copy.SetTexture(mCopyKernelId, "_ResultAbs", Display); yield return(new WaitForSeconds(1)); mCutFigure = Instantiate(mCutPrefab, mTree); mCutFigure.SetActive(Cut); mCutFigure.GetComponent <Synch>().From = mCutAnchor; mPlane.CanShow = true; mStart = true; yield break; }