Search Unity

Help for render mesh with DrawProceduralIndirect

Discussion in 'Shaders' started by lkledu, May 24, 2020.

  1. lkledu

    lkledu

    Joined:
    Sep 9, 2017
    Posts:
    3
    Hi, i'm trying render 3 triangles with DrawProceduralIndirect(), but it's not rendering anything.

    Code (CSharp):
    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using UnityEngine.Rendering;
    5.  
    6. public class CreateProcedural : MonoBehaviour
    7. {
    8.     public Material _material;
    9.     public ComputeShader shader;
    10.    
    11.     ComputeBuffer _cBuffer;
    12.     ComputeBuffer _argBuffer;
    13.  
    14.     private void Start()
    15.     {
    16.         int kernel = shader.FindKernel("CSMain");
    17.         _cBuffer = new ComputeBuffer(3, sizeof(float) * 3, ComputeBufferType.Append);
    18.         _argBuffer = new ComputeBuffer(4, sizeof(int), ComputeBufferType.IndirectArguments);
    19.  
    20.         int[] args = new int[] { 0, 1, 0, 0 };
    21.         _argBuffer.SetData(args);
    22.         ComputeBuffer.CopyCount(_cBuffer, _argBuffer, 0);
    23.  
    24.         _argBuffer.GetData(args);
    25.  
    26.         Debug.Log("vertex count " + args[0]);
    27.         Debug.Log("instance count " + args[1]);
    28.         Debug.Log("start vertex " + args[2]);
    29.         Debug.Log("start instance " + args[3]);
    30.  
    31.         shader.SetBuffer(kernel, "cBuffer", _cBuffer);
    32.         shader.Dispatch(kernel, 1,1,1);
    33.     }
    34.  
    35.     void OnRenderObject()
    36.     {
    37.         Graphics.DrawProceduralIndirect(
    38.             _material,
    39.             new Bounds(transform.position, transform.lossyScale * 5),
    40.             MeshTopology.Triangles,
    41.             _cBuffer, 0,
    42.             null, null,
    43.             ShadowCastingMode.Off, true,
    44.             0);
    45.     }
    46.  
    47.     void OnDestroy()
    48.     {
    49.         _cBuffer.Release();
    50.         _argBuffer.Release();
    51.     }
    52. }
    Code (CSharp):
    1. #pragma kernel CSMain
    2.  
    3. AppendStructuredBuffer<float3> cBuffer;
    4.  
    5. [numthreads(3,3,1)]
    6. void CSMain (uint3 id : SV_DispatchThreadID)
    7. {
    8.     float3 pos = id;
    9.    
    10.     cBuffer.Append(pos);
    11. }
    i'm having problem to find any link related.