MeshWriter.compute 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // Each #kernel tells which function to compile; you can have many kernels
  2. #pragma kernel MeshPositionUpdate
  3. #pragma kernel MeshPositionNormalUpdate
  4. uint VertexCount;
  5. uint VertexCount2;
  6. uint VertexStride;
  7. uint VertexStride2;
  8. uint ChunkStart;
  9. uint ChunkStart2;
  10. RWByteAddressBuffer VertexBuffer;
  11. RWByteAddressBuffer VertexBuffer2;
  12. StructuredBuffer<float3> Positions;
  13. StructuredBuffer<float3> Normals;
  14. void WritePosition(uint id, uint vcnt, uint stride, uint cstart, RWByteAddressBuffer vb)
  15. {
  16. if (id >= vcnt)
  17. return;
  18. uint index = cstart + id;
  19. float3 pos = Positions[index];
  20. // 使用頂点判定
  21. if (pos.x > 99999.0f) // (RenderMeshWorker.cs - CalcVertexUseFlagJobを参照)
  22. return;
  23. uint addr_v = id * stride;
  24. vb.Store3(addr_v, asuint(pos));
  25. }
  26. void WritePositionNormal(uint id, uint vcnt, uint stride, uint cstart, RWByteAddressBuffer vb)
  27. {
  28. if (id >= vcnt)
  29. return;
  30. uint index = cstart + id;
  31. float3 pos = Positions[index];
  32. // 使用頂点判定
  33. if (pos.x > 99999.0f) // (RenderMeshWorker.cs - CalcVertexUseFlagJobを参照)
  34. return;
  35. float3 nor = Normals[index];
  36. uint addr_v = id * stride;
  37. vb.Store3(addr_v, asuint(pos));
  38. vb.Store3(addr_v + 12, asuint(nor));
  39. }
  40. [numthreads(64, 1, 1)]
  41. void MeshPositionUpdate(uint id : SV_DispatchThreadID)
  42. {
  43. // (1)
  44. WritePosition(id, VertexCount, VertexStride, ChunkStart, VertexBuffer);
  45. // (2)
  46. WritePosition(id, VertexCount2, VertexStride2, ChunkStart2, VertexBuffer2);
  47. }
  48. [numthreads(64, 1, 1)]
  49. void MeshPositionNormalUpdate(uint id : SV_DispatchThreadID)
  50. {
  51. // (1)
  52. WritePositionNormal(id, VertexCount, VertexStride, ChunkStart, VertexBuffer);
  53. // (2)
  54. WritePositionNormal(id, VertexCount2, VertexStride2, ChunkStart2, VertexBuffer2);
  55. }