//TODO: Streaming Loading /// <summary> /// Initialize pipeline buffers /// </summary> /// <param name="baseBuffer"></param> pipeline base buffer public static void InitBaseBuffer(PipelineBaseBuffer baseBuffer, ClusterMatResources materialResources, string name, int maximumLength) { if (maximumLength <= 0) { return; } baseBuffer.clusterBuffer = new ComputeBuffer(maximumLength, sizeof(Cluster)); baseBuffer.resultBuffer = new ComputeBuffer(maximumLength, sizeof(uint)); baseBuffer.instanceCountBuffer = new ComputeBuffer(5, 4, ComputeBufferType.IndirectArguments); NativeArray <uint> instanceCountBufferValue = new NativeArray <uint>(5, Allocator.Temp); instanceCountBufferValue[0] = PipelineBaseBuffer.CLUSTERVERTEXCOUNT; baseBuffer.instanceCountBuffer.SetData(instanceCountBufferValue); baseBuffer.moveCountBuffer = new ComputeBuffer(5, sizeof(int), ComputeBufferType.IndirectArguments); baseBuffer.verticesBuffer = new ComputeBuffer(maximumLength * PipelineBaseBuffer.CLUSTERCLIPCOUNT, sizeof(Point)); baseBuffer.clusterCount = 0; if (GeometryEvent.useHiZ) { baseBuffer.reCheckCount = new ComputeBuffer(5, sizeof(int), ComputeBufferType.IndirectArguments); baseBuffer.dispatchBuffer = new ComputeBuffer(5, sizeof(int), ComputeBufferType.IndirectArguments); baseBuffer.reCheckResult = new ComputeBuffer(baseBuffer.resultBuffer.count, sizeof(uint)); baseBuffer.reCheckCount.SetData(instanceCountBufferValue); UnsafeUtility.MemClear(instanceCountBufferValue.GetUnsafePtr(), 5 * sizeof(int)); instanceCountBufferValue[1] = 1; instanceCountBufferValue[2] = 1; baseBuffer.dispatchBuffer.SetData(instanceCountBufferValue); } }
//TODO: Streaming Loading /// <summary> /// Initialize pipeline buffers /// </summary> /// <param name="baseBuffer"></param> pipeline base buffer public static void InitBaseBuffer(PipelineBaseBuffer baseBuffer, ClusterMatResources materialResources, string name, int maximumLength) { baseBuffer.clusterBuffer = new ComputeBuffer(maximumLength, sizeof(CullBox)); baseBuffer.resultBuffer = new ComputeBuffer(maximumLength, PipelineBaseBuffer.UINTSIZE); baseBuffer.instanceCountBuffer = new ComputeBuffer(5, 4, ComputeBufferType.IndirectArguments); NativeArray <uint> instanceCountBufferValue = new NativeArray <uint>(5, Allocator.Temp); instanceCountBufferValue[0] = PipelineBaseBuffer.CLUSTERVERTEXCOUNT; baseBuffer.instanceCountBuffer.SetData(instanceCountBufferValue); instanceCountBufferValue.Dispose(); baseBuffer.verticesBuffer = new ComputeBuffer(maximumLength * PipelineBaseBuffer.CLUSTERCLIPCOUNT, sizeof(Point)); baseBuffer.clusterCount = 0; baseBuffer.dispatchBuffer = new ComputeBuffer(5, 4, ComputeBufferType.IndirectArguments); NativeArray <uint> occludedCountList = new NativeArray <uint>(5, Allocator.Temp, NativeArrayOptions.ClearMemory); occludedCountList[1] = 1; occludedCountList[2] = 1; baseBuffer.dispatchBuffer.SetData(occludedCountList); baseBuffer.reCheckCount = new ComputeBuffer(5, 4, ComputeBufferType.IndirectArguments); baseBuffer.reCheckResult = new ComputeBuffer(maximumLength, 4); occludedCountList[0] = PipelineBaseBuffer.CLUSTERVERTEXCOUNT; occludedCountList[1] = 0; occludedCountList[2] = 0; baseBuffer.reCheckCount.SetData(occludedCountList); occludedCountList.Dispose(); }
//TODO: Streaming Loading /// <summary> /// Initialize pipeline buffers /// </summary> /// <param name="baseBuffer"></param> pipeline base buffer public static void InitBaseBuffer(PipelineBaseBuffer baseBuffer, ClusterMatResources materialResources, string name, int maximumLength) { baseBuffer.clusterBuffer = new ComputeBuffer(maximumLength, sizeof(CullBox)); baseBuffer.resultBuffer = new ComputeBuffer(maximumLength, PipelineBaseBuffer.UINTSIZE); baseBuffer.instanceCountBuffer = new ComputeBuffer(5, 4, ComputeBufferType.IndirectArguments); NativeArray <uint> instanceCountBufferValue = new NativeArray <uint>(5, Allocator.Temp); instanceCountBufferValue[0] = PipelineBaseBuffer.CLUSTERVERTEXCOUNT; baseBuffer.instanceCountBuffer.SetData(instanceCountBufferValue); instanceCountBufferValue.Dispose(); baseBuffer.verticesBuffer = new ComputeBuffer(maximumLength * PipelineBaseBuffer.CLUSTERCLIPCOUNT, sizeof(float3)); baseBuffer.clusterCount = 0; }
//TODO: Streaming Loading /// <summary> /// Initialize pipeline buffers /// </summary> /// <param name="baseBuffer"></param> pipeline base buffer public static void InitBaseBuffer(ref PipelineBaseBuffer baseBuffer, ClusterMatResources materialResources, string name, int maximumLength) { /* * baseBuffer.propertyBuffer = new ComputeBuffer(materialResources.values.Length, sizeof(PropertyValue)); * baseBuffer.propertyBuffer.SetData(materialResources.values); * baseBuffer.combinedMaterial = new Material(Shader.Find("Maxwell/CombinedProcedural")); * baseBuffer.combinedMaterial.SetBuffer("_PropertiesBuffer", baseBuffer.propertyBuffer); * foreach (var i in materialResources.textures) * { * baseBuffer.combinedMaterial.SetTexture(i.key, i.value); * }*/ baseBuffer.clusterBuffer = new ComputeBuffer(maximumLength, sizeof(ClusterMeshData)); baseBuffer.resultBuffer = new ComputeBuffer(maximumLength, PipelineBaseBuffer.UINTSIZE); baseBuffer.instanceCountBuffer = new ComputeBuffer(5, 4, ComputeBufferType.IndirectArguments); NativeArray <uint> instanceCountBufferValue = new NativeArray <uint>(5, Allocator.Temp); instanceCountBufferValue[0] = PipelineBaseBuffer.CLUSTERVERTEXCOUNT; baseBuffer.instanceCountBuffer.SetData(instanceCountBufferValue); instanceCountBufferValue.Dispose(); baseBuffer.verticesBuffer = new ComputeBuffer(maximumLength * PipelineBaseBuffer.CLUSTERCLIPCOUNT, sizeof(Point)); baseBuffer.clusterCount = 0; baseBuffer.dispatchBuffer = new ComputeBuffer(5, 4, ComputeBufferType.IndirectArguments); NativeArray <uint> occludedCountList = new NativeArray <uint>(5, Allocator.Temp, NativeArrayOptions.ClearMemory); occludedCountList[0] = 0; occludedCountList[1] = 1; occludedCountList[2] = 1; occludedCountList[3] = 0; occludedCountList[4] = 0; baseBuffer.dispatchBuffer.SetData(occludedCountList); baseBuffer.reCheckCount = new ComputeBuffer(5, 4, ComputeBufferType.IndirectArguments); baseBuffer.reCheckResult = new ComputeBuffer(maximumLength, 4); occludedCountList[0] = PipelineBaseBuffer.CLUSTERVERTEXCOUNT; occludedCountList[1] = 0; occludedCountList[2] = 0; baseBuffer.reCheckCount.SetData(occludedCountList); occludedCountList.Dispose(); }