// 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); }
// 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); }