Пример #1
0
    //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);
        }
    }
Пример #2
0
    //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();
    }
Пример #3
0
    //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;
    }
Пример #4
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();
    }