public void InitPreviewRenderTexture(bool assignRtDisplay = true, string name = "Preview") { TC_Compute.InitPreviewRenderTexture(ref rtPreview, name); if (assignRtDisplay) { rtDisplay = rtPreview; } }
// Compute height, trees and objects public ComputeBuffer ComputeSingle(ref ComputeBuffer totalBuffer, float seedParent, bool first = false) { if (!groupResult.active) { return(null); } TC_Compute compute = TC_Compute.instance; float seedTotal = seed + seedParent; totalBuffer = groupResult.ComputeSingle(seedTotal, first); // Debug.Log("layerMaskBuffer " + layerMaskBuffer == null); ComputeBuffer maskBuffer = null; if (maskNodeGroup.active) { maskBuffer = maskNodeGroup.ComputeValue(seedTotal); } if (maskBuffer != null) { TC_Compute.InitPreviewRenderTexture(ref rtPreview, "rtPreview_LayerGroup"); if (method != Method.Lerp || first) { if (outputId == TC.heightOutput) { compute.RunComputeMethod(null, null, totalBuffer, ref maskBuffer, 0, rtPreview); } else { compute.RunItemComputeMask(this, ref rtPreview, groupResult.rtDisplay, ref totalBuffer, ref maskBuffer); } } rtDisplay = rtPreview; } else { if (outputId == TC.heightOutput || level == 0 || groupResult.totalActive == 1) { rtDisplay = groupResult.rtDisplay; } else { rtDisplay = rtPreview; } } if (totalBuffer == null) { TC_Reporter.Log("Layer buffer null"); } return(maskBuffer); }
public bool ComputeMulti(ref RenderTexture[] renderTextures, ref ComputeBuffer maskBuffer, float seedParent, bool first = false) { TC_Compute compute = TC_Compute.instance; bool didCompute = false; float seedTotal = seed + seedParent; ComputeBuffer layerBuffer = selectNodeGroup.ComputeValue(seedTotal); if (layerBuffer != null) { didCompute = true; TC_Compute.InitPreviewRenderTexture(ref rtPreview, "rtPreview_Layer"); if (maskNodeGroup.active) { maskBuffer = maskNodeGroup.ComputeValue(seedTotal); } TC_Compute.InitPreviewRenderTexture(ref selectNodeGroup.rtColorPreview, "rtNodeGroupPreview_" + TC.outputNames[outputId]); if (outputId == TC.colorOutput) { compute.RunColorCompute(selectNodeGroup, selectItemGroup, ref renderTextures[0], ref layerBuffer); } else { compute.RunSplatCompute(selectNodeGroup, selectItemGroup, ref renderTextures, ref layerBuffer); } compute.DisposeBuffer(ref layerBuffer); if (maskBuffer != null) { TC_Reporter.Log("Run layer select * mask"); if (method != Method.Lerp || first) { if (outputId == TC.colorOutput) { compute.RunComputeColorMethod(this, ref renderTextures[0], maskBuffer, rtPreview); } else { compute.RunComputeMultiMethod(this, doNormalize, ref renderTextures, maskBuffer, rtPreview); } } rtDisplay = rtPreview; } else { TC_Reporter.Log("No mask buffer assign colorPreviewTex to layer"); rtDisplay = selectNodeGroup.rtColorPreview; } } return(didCompute); }
public void SetPreviewTextureBefore() { // Debug.Log("no " + maskNodeGroup.itemList.Count + " " + itemList.Count); if (totalActive == 0) { active = false; rtDisplay = null; TC_Compute.DisposeRenderTexture(ref rtPreview); } else if (totalActive != 1) { TC_Compute.InitPreviewRenderTexture(ref rtPreview, "rtGroupResult"); rtDisplay = rtPreview; } }
// Compute trees and objects public bool ComputeItem(ref ComputeBuffer itemMapBuffer, ref ComputeBuffer maskBuffer, float seedParent, bool first = false) { TC_Compute compute = TC_Compute.instance; bool didCompute = false; float seedTotal = seed + seedParent; ComputeBuffer selectBuffer = selectNodeGroup.ComputeValue(seedTotal); if (selectBuffer != null) { didCompute = true; TC_Compute.InitPreviewRenderTexture(ref rtPreview, "rtPreview_Layer_" + TC.outputNames[outputId]); rtDisplay = rtPreview; TC_Compute.InitPreviewRenderTexture(ref selectNodeGroup.rtColorPreview, "rtColorPreview"); compute.RunItemCompute(this, ref itemMapBuffer, ref selectBuffer); compute.DisposeBuffer(ref selectBuffer); // compute.shader.SetBuffer(compute.terrainSplatmap0Kernel, "itemMapBuffer", itemMapBuffer); // compute.RunItemPositionCompute(itemMapBuffer, TC.treeOutput); if (maskNodeGroup.active) { maskBuffer = maskNodeGroup.ComputeValue(seedTotal); } if (maskBuffer != null) { TC_Reporter.Log("Run layer select * mask"); if (method != Method.Lerp || first) { compute.RunItemComputeMask(this, ref rtPreview, selectNodeGroup.rtColorPreview, ref itemMapBuffer, ref maskBuffer); } } } return(didCompute); }
// Compute Color, splat and grass public bool ComputeMulti(ref RenderTexture[] renderTextures, ref ComputeBuffer maskBuffer, float seedParent, bool first = false) { TC_Compute compute = TC_Compute.instance; float totalSeed = seed + seedParent; bool computed = groupResult.ComputeMulti(ref renderTextures, totalSeed, doNormalize, first); if (maskNodeGroup.active) { maskBuffer = maskNodeGroup.ComputeValue(totalSeed); } if (maskBuffer != null) { TC_Compute.InitPreviewRenderTexture(ref rtPreview, "rtPreview_LayerGroup_" + TC.outputNames[outputId]); if (method != Method.Lerp || first) { if (outputId == TC.colorOutput) { compute.RunComputeColorMethod(this, ref renderTextures[0], maskBuffer, groupResult.rtDisplay); } else { compute.RunComputeMultiMethod(this, doNormalize, ref renderTextures, maskBuffer, groupResult.rtDisplay); } } rtDisplay = rtPreview; } else { rtDisplay = groupResult.rtDisplay; } return(computed); }