react-native-wgpu 0.2.10 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/README.md +155 -69
  2. package/android/CMakeLists.txt +4 -5
  3. package/android/build.gradle +7 -18
  4. package/android/src/main/java/com/webgpu/WebGPUViewPackage.java +34 -10
  5. package/apple/MetalView.mm +0 -19
  6. package/apple/WebGPUModule.h +1 -9
  7. package/apple/WebGPUModule.mm +0 -3
  8. package/apple/WebGPUView.h +0 -3
  9. package/apple/WebGPUView.mm +0 -2
  10. package/cpp/WGPULogger.h +10 -0
  11. package/cpp/dawn/dawn_proc_table.h +1 -1
  12. package/cpp/dawn/webgpu.h +4855 -0
  13. package/cpp/dawn/webgpu_cpp.h +10168 -0
  14. package/cpp/dawn/wire/client/webgpu.h +354 -0
  15. package/cpp/dawn/wire/client/webgpu_cpp.h +10343 -0
  16. package/cpp/dawn/wire/client/webgpu_cpp_print.h +2715 -0
  17. package/cpp/jsi/RNFJSIConverter.h +17 -59
  18. package/cpp/rnwgpu/RNWebGPUManager.cpp +1 -9
  19. package/cpp/rnwgpu/api/GPU.cpp +51 -26
  20. package/cpp/rnwgpu/api/GPU.h +5 -18
  21. package/cpp/rnwgpu/api/GPUAdapter.cpp +75 -54
  22. package/cpp/rnwgpu/api/GPUAdapter.h +6 -6
  23. package/cpp/rnwgpu/api/GPUAdapterInfo.h +0 -1
  24. package/cpp/rnwgpu/api/GPUBindGroup.h +1 -3
  25. package/cpp/rnwgpu/api/GPUBindGroupLayout.h +1 -3
  26. package/cpp/rnwgpu/api/GPUBuffer.cpp +35 -32
  27. package/cpp/rnwgpu/api/GPUBuffer.h +9 -7
  28. package/cpp/rnwgpu/api/GPUCanvasContext.cpp +5 -1
  29. package/cpp/rnwgpu/api/GPUCanvasContext.h +0 -2
  30. package/cpp/rnwgpu/api/GPUCommandBuffer.h +1 -3
  31. package/cpp/rnwgpu/api/GPUCommandEncoder.h +1 -3
  32. package/cpp/rnwgpu/api/GPUCompilationInfo.h +0 -2
  33. package/cpp/rnwgpu/api/GPUCompilationMessage.h +1 -3
  34. package/cpp/rnwgpu/api/GPUComputePassEncoder.h +1 -3
  35. package/cpp/rnwgpu/api/GPUComputePipeline.h +1 -3
  36. package/cpp/rnwgpu/api/GPUDevice.cpp +183 -128
  37. package/cpp/rnwgpu/api/GPUDevice.h +22 -21
  38. package/cpp/rnwgpu/api/GPUDeviceLostInfo.h +1 -3
  39. package/cpp/rnwgpu/api/GPUExternalTexture.h +1 -3
  40. package/cpp/rnwgpu/api/GPUPipelineLayout.h +1 -3
  41. package/cpp/rnwgpu/api/GPUQuerySet.h +1 -3
  42. package/cpp/rnwgpu/api/GPUQueue.cpp +19 -8
  43. package/cpp/rnwgpu/api/GPUQueue.h +7 -6
  44. package/cpp/rnwgpu/api/GPURenderBundle.h +1 -3
  45. package/cpp/rnwgpu/api/GPURenderBundleEncoder.h +1 -3
  46. package/cpp/rnwgpu/api/GPURenderPassEncoder.h +1 -3
  47. package/cpp/rnwgpu/api/GPURenderPipeline.h +1 -3
  48. package/cpp/rnwgpu/api/GPUSampler.h +1 -3
  49. package/cpp/rnwgpu/api/GPUShaderModule.cpp +42 -28
  50. package/cpp/rnwgpu/api/GPUShaderModule.h +6 -6
  51. package/cpp/rnwgpu/api/GPUSupportedLimits.h +1 -3
  52. package/cpp/rnwgpu/api/GPUTexture.h +1 -3
  53. package/cpp/rnwgpu/api/GPUTextureView.h +1 -3
  54. package/cpp/rnwgpu/api/RNWebGPU.h +1 -7
  55. package/cpp/rnwgpu/async/AsyncDispatcher.h +28 -0
  56. package/cpp/rnwgpu/async/AsyncRunner.cpp +215 -0
  57. package/cpp/rnwgpu/async/AsyncRunner.h +53 -0
  58. package/cpp/rnwgpu/async/AsyncTaskHandle.cpp +181 -0
  59. package/cpp/rnwgpu/async/AsyncTaskHandle.h +55 -0
  60. package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.cpp +23 -0
  61. package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.h +22 -0
  62. package/cpp/webgpu/webgpu.h +5 -4827
  63. package/cpp/webgpu/webgpu_cpp.h +5 -10140
  64. package/cpp/{dawn/native/WebGPUBackend.h → webgpu/webgpu_cpp_print.h} +4 -20
  65. package/lib/commonjs/Canvas.js +6 -66
  66. package/lib/commonjs/Canvas.js.map +1 -1
  67. package/lib/commonjs/hooks.js +6 -42
  68. package/lib/commonjs/hooks.js.map +1 -1
  69. package/lib/module/Canvas.js +7 -67
  70. package/lib/module/Canvas.js.map +1 -1
  71. package/lib/module/hooks.js +5 -40
  72. package/lib/module/hooks.js.map +1 -1
  73. package/lib/typescript/lib/commonjs/hooks.d.ts +1 -5
  74. package/lib/typescript/lib/commonjs/hooks.d.ts.map +1 -1
  75. package/lib/typescript/lib/module/Canvas.d.ts.map +1 -1
  76. package/lib/typescript/lib/module/hooks.d.ts +1 -5
  77. package/lib/typescript/lib/module/hooks.d.ts.map +1 -1
  78. package/lib/typescript/src/Canvas.d.ts +0 -1
  79. package/lib/typescript/src/Canvas.d.ts.map +1 -1
  80. package/lib/typescript/src/hooks.d.ts +2 -7
  81. package/lib/typescript/src/hooks.d.ts.map +1 -1
  82. package/libs/android/arm64-v8a/libwebgpu_dawn.so +0 -0
  83. package/libs/android/armeabi-v7a/libwebgpu_dawn.so +0 -0
  84. package/libs/android/x86/libwebgpu_dawn.so +0 -0
  85. package/libs/android/x86_64/libwebgpu_dawn.so +0 -0
  86. package/libs/apple/libwebgpu_dawn.xcframework/Info.plist +5 -35
  87. package/libs/apple/libwebgpu_dawn.xcframework/ios-arm64/libwebgpu_dawn.a +0 -0
  88. package/libs/apple/libwebgpu_dawn.xcframework/ios-arm64_x86_64-simulator/libwebgpu_dawn.a +0 -0
  89. package/libs/apple/libwebgpu_dawn.xcframework/macos-arm64_x86_64/libwebgpu_dawn.a +0 -0
  90. package/package.json +4 -3
  91. package/react-native-wgpu.podspec +12 -16
  92. package/src/Canvas.tsx +8 -69
  93. package/src/hooks.tsx +14 -48
  94. package/android/cpp/platform/ThreadUtils.cpp +0 -41
  95. package/android/src/oldarch/com/webgpu/NativeWebGPUModuleSpec.java +0 -23
  96. package/android/src/oldarch/com/webgpu/WebGPUViewManagerSpec.java +0 -12
  97. package/apple/WebGPUViewManager.mm +0 -24
  98. package/apple/platform/ThreadUtils.cpp +0 -34
  99. package/cpp/dawn/dawn_proc.h +0 -50
  100. package/cpp/dawn/dawn_thread_dispatch_proc.h +0 -47
  101. package/cpp/dawn/native/D3D11Backend.h +0 -77
  102. package/cpp/dawn/native/D3D12Backend.h +0 -68
  103. package/cpp/dawn/native/D3DBackend.h +0 -56
  104. package/cpp/dawn/native/MetalBackend.h +0 -56
  105. package/cpp/dawn/platform/DawnPlatform.h +0 -167
  106. package/cpp/dawn/platform/dawn_platform_export.h +0 -49
  107. package/cpp/platform/ThreadUtils.h +0 -30
  108. package/cpp/rnwgpu/api/AsyncRunner.h +0 -30
  109. package/cpp/threading/CallInvokerDispatcher.h +0 -37
  110. package/cpp/threading/Dispatcher.cpp +0 -55
  111. package/cpp/threading/Dispatcher.h +0 -93
  112. package/cpp/threading/ThreadPool.cpp +0 -88
  113. package/cpp/threading/ThreadPool.h +0 -53
  114. package/cpp/webgpu/webgpu_glfw.h +0 -88
  115. package/lib/typescript/src/__tests__/Alpha.spec.d.ts +0 -2
  116. package/lib/typescript/src/__tests__/Alpha.spec.d.ts.map +0 -1
  117. package/lib/typescript/src/__tests__/ArrayBuffer.spec.d.ts +0 -2
  118. package/lib/typescript/src/__tests__/ArrayBuffer.spec.d.ts.map +0 -1
  119. package/lib/typescript/src/__tests__/Buffer.spec.d.ts +0 -2
  120. package/lib/typescript/src/__tests__/Buffer.spec.d.ts.map +0 -1
  121. package/lib/typescript/src/__tests__/ComputeShader.spec.d.ts +0 -2
  122. package/lib/typescript/src/__tests__/ComputeShader.spec.d.ts.map +0 -1
  123. package/lib/typescript/src/__tests__/Constants.spec.d.ts +0 -2
  124. package/lib/typescript/src/__tests__/Constants.spec.d.ts.map +0 -1
  125. package/lib/typescript/src/__tests__/Device.spec.d.ts +0 -2
  126. package/lib/typescript/src/__tests__/Device.spec.d.ts.map +0 -1
  127. package/lib/typescript/src/__tests__/ErrorScope.spec.d.ts +0 -2
  128. package/lib/typescript/src/__tests__/ErrorScope.spec.d.ts.map +0 -1
  129. package/lib/typescript/src/__tests__/ExternalTexture.spec.d.ts +0 -2
  130. package/lib/typescript/src/__tests__/ExternalTexture.spec.d.ts.map +0 -1
  131. package/lib/typescript/src/__tests__/GPU.spec.d.ts +0 -2
  132. package/lib/typescript/src/__tests__/GPU.spec.d.ts.map +0 -1
  133. package/lib/typescript/src/__tests__/ImageData.spec.d.ts +0 -2
  134. package/lib/typescript/src/__tests__/ImageData.spec.d.ts.map +0 -1
  135. package/lib/typescript/src/__tests__/Shaders.spec.d.ts +0 -2
  136. package/lib/typescript/src/__tests__/Shaders.spec.d.ts.map +0 -1
  137. package/lib/typescript/src/__tests__/Texture.spec.d.ts +0 -2
  138. package/lib/typescript/src/__tests__/Texture.spec.d.ts.map +0 -1
  139. package/lib/typescript/src/__tests__/components/Wireframe/Shaders.d.ts +0 -3
  140. package/lib/typescript/src/__tests__/components/Wireframe/Shaders.d.ts.map +0 -1
  141. package/lib/typescript/src/__tests__/components/Wireframe/models.d.ts +0 -29
  142. package/lib/typescript/src/__tests__/components/Wireframe/models.d.ts.map +0 -1
  143. package/lib/typescript/src/__tests__/components/Wireframe/utils.d.ts +0 -5
  144. package/lib/typescript/src/__tests__/components/Wireframe/utils.d.ts.map +0 -1
  145. package/lib/typescript/src/__tests__/components/cube.d.ts +0 -7
  146. package/lib/typescript/src/__tests__/components/cube.d.ts.map +0 -1
  147. package/lib/typescript/src/__tests__/components/meshes/mesh.d.ts +0 -22
  148. package/lib/typescript/src/__tests__/components/meshes/mesh.d.ts.map +0 -1
  149. package/lib/typescript/src/__tests__/components/meshes/sphere.d.ts +0 -12
  150. package/lib/typescript/src/__tests__/components/meshes/sphere.d.ts.map +0 -1
  151. package/lib/typescript/src/__tests__/components/meshes/stanfordDragon.d.ts +0 -7
  152. package/lib/typescript/src/__tests__/components/meshes/stanfordDragon.d.ts.map +0 -1
  153. package/lib/typescript/src/__tests__/components/meshes/stanfordDragonData.d.ts +0 -6
  154. package/lib/typescript/src/__tests__/components/meshes/stanfordDragonData.d.ts.map +0 -1
  155. package/lib/typescript/src/__tests__/components/meshes/teapot.d.ts +0 -6
  156. package/lib/typescript/src/__tests__/components/meshes/teapot.d.ts.map +0 -1
  157. package/lib/typescript/src/__tests__/components/meshes/utils.d.ts +0 -10
  158. package/lib/typescript/src/__tests__/components/meshes/utils.d.ts.map +0 -1
  159. package/lib/typescript/src/__tests__/components/triangle.d.ts +0 -3
  160. package/lib/typescript/src/__tests__/components/triangle.d.ts.map +0 -1
  161. package/lib/typescript/src/__tests__/config.d.ts +0 -3
  162. package/lib/typescript/src/__tests__/config.d.ts.map +0 -1
  163. package/lib/typescript/src/__tests__/demos/ABuffer.spec.d.ts +0 -2
  164. package/lib/typescript/src/__tests__/demos/ABuffer.spec.d.ts.map +0 -1
  165. package/lib/typescript/src/__tests__/demos/Blur.spec.d.ts +0 -2
  166. package/lib/typescript/src/__tests__/demos/Blur.spec.d.ts.map +0 -1
  167. package/lib/typescript/src/__tests__/demos/Cube.spec.d.ts +0 -2
  168. package/lib/typescript/src/__tests__/demos/Cube.spec.d.ts.map +0 -1
  169. package/lib/typescript/src/__tests__/demos/FractalCube.spec.d.ts +0 -2
  170. package/lib/typescript/src/__tests__/demos/FractalCube.spec.d.ts.map +0 -1
  171. package/lib/typescript/src/__tests__/demos/OcclusionQuery.spec.d.ts +0 -2
  172. package/lib/typescript/src/__tests__/demos/OcclusionQuery.spec.d.ts.map +0 -1
  173. package/lib/typescript/src/__tests__/demos/RenderBundles.spec.d.ts +0 -2
  174. package/lib/typescript/src/__tests__/demos/RenderBundles.spec.d.ts.map +0 -1
  175. package/lib/typescript/src/__tests__/demos/Triangle.spec.d.ts +0 -2
  176. package/lib/typescript/src/__tests__/demos/Triangle.spec.d.ts.map +0 -1
  177. package/lib/typescript/src/__tests__/demos/Wireframe.spec.d.ts +0 -2
  178. package/lib/typescript/src/__tests__/demos/Wireframe.spec.d.ts.map +0 -1
  179. package/lib/typescript/src/__tests__/globalSetup.d.ts +0 -3
  180. package/lib/typescript/src/__tests__/globalSetup.d.ts.map +0 -1
  181. package/lib/typescript/src/__tests__/globalTeardown.d.ts +0 -3
  182. package/lib/typescript/src/__tests__/globalTeardown.d.ts.map +0 -1
  183. package/lib/typescript/src/__tests__/setup.d.ts +0 -63
  184. package/lib/typescript/src/__tests__/setup.d.ts.map +0 -1
  185. package/libs/apple/arm64_iphoneos/libwebgpu_dawn.a +0 -0
  186. package/libs/apple/arm64_iphonesimulator/libwebgpu_dawn.a +0 -0
  187. package/libs/apple/arm64_xros/libwebgpu_dawn.a +0 -0
  188. package/libs/apple/arm64_xrsimulator/libwebgpu_dawn.a +0 -0
  189. package/libs/apple/iphonesimulator/libwebgpu_dawn.a +0 -0
  190. package/libs/apple/libwebgpu_dawn.xcframework/xros-arm64/libwebgpu_dawn.a +0 -0
  191. package/libs/apple/libwebgpu_dawn.xcframework/xros-arm64-simulator/libwebgpu_dawn.a +0 -0
  192. package/libs/apple/universal_macosx/libwebgpu_dawn.a +0 -0
  193. package/libs/apple/x86_64_iphonesimulator/libwebgpu_dawn.a +0 -0
  194. package/libs/dawn.json +0 -4670
  195. package/src/__tests__/Alpha.spec.ts +0 -28
  196. package/src/__tests__/ArrayBuffer.spec.ts +0 -76
  197. package/src/__tests__/Buffer.spec.ts +0 -357
  198. package/src/__tests__/ComputeShader.spec.ts +0 -375
  199. package/src/__tests__/Constants.spec.ts +0 -89
  200. package/src/__tests__/Device.spec.ts +0 -84
  201. package/src/__tests__/ErrorScope.spec.ts +0 -92
  202. package/src/__tests__/ExternalTexture.spec.ts +0 -284
  203. package/src/__tests__/GPU.spec.ts +0 -272
  204. package/src/__tests__/ImageData.spec.ts +0 -26
  205. package/src/__tests__/Shaders.spec.ts +0 -232
  206. package/src/__tests__/Texture.spec.ts +0 -197
  207. package/src/__tests__/assets/Di-3d.png +0 -0
  208. package/src/__tests__/components/Wireframe/Shaders.ts +0 -138
  209. package/src/__tests__/components/Wireframe/models.ts +0 -113
  210. package/src/__tests__/components/Wireframe/utils.ts +0 -22
  211. package/src/__tests__/components/cube.ts +0 -51
  212. package/src/__tests__/components/meshes/mesh.ts +0 -96
  213. package/src/__tests__/components/meshes/sphere.ts +0 -103
  214. package/src/__tests__/components/meshes/stanfordDragon.ts +0 -44
  215. package/src/__tests__/components/meshes/stanfordDragonData.ts +0 -5
  216. package/src/__tests__/components/meshes/teapot.ts +0 -13
  217. package/src/__tests__/components/meshes/utils.ts +0 -235
  218. package/src/__tests__/components/triangle.ts +0 -17
  219. package/src/__tests__/config.ts +0 -2
  220. package/src/__tests__/demos/ABuffer.spec.ts +0 -890
  221. package/src/__tests__/demos/Blur.spec.ts +0 -398
  222. package/src/__tests__/demos/Cube.spec.ts +0 -929
  223. package/src/__tests__/demos/FractalCube.spec.ts +0 -240
  224. package/src/__tests__/demos/OcclusionQuery.spec.ts +0 -376
  225. package/src/__tests__/demos/RenderBundles.spec.ts +0 -580
  226. package/src/__tests__/demos/Triangle.spec.ts +0 -266
  227. package/src/__tests__/demos/Wireframe.spec.ts +0 -188
  228. package/src/__tests__/globalSetup.ts +0 -45
  229. package/src/__tests__/globalTeardown.ts +0 -11
  230. package/src/__tests__/setup.ts +0 -423
  231. package/src/__tests__/snapshots/abuffer.png +0 -0
  232. package/src/__tests__/snapshots/asteroid.png +0 -0
  233. package/src/__tests__/snapshots/blur.png +0 -0
  234. package/src/__tests__/snapshots/buffer.png +0 -0
  235. package/src/__tests__/snapshots/constant-triangle.png +0 -0
  236. package/src/__tests__/snapshots/cube.png +0 -0
  237. package/src/__tests__/snapshots/f.png +0 -0
  238. package/src/__tests__/snapshots/f2.png +0 -0
  239. package/src/__tests__/snapshots/fractal-cubes.png +0 -0
  240. package/src/__tests__/snapshots/instanced-cubes.png +0 -0
  241. package/src/__tests__/snapshots/occlusion-query.png +0 -0
  242. package/src/__tests__/snapshots/ref.png +0 -0
  243. package/src/__tests__/snapshots/semi-opaque-cyan.png +0 -0
  244. package/src/__tests__/snapshots/texture.png +0 -0
  245. package/src/__tests__/snapshots/textured-cube.png +0 -0
  246. package/src/__tests__/snapshots/triangle-msaa.png +0 -0
  247. package/src/__tests__/snapshots/triangle.png +0 -0
  248. package/src/__tests__/snapshots/two-cube.png +0 -0
@@ -1,51 +0,0 @@
1
- export const cubeVertexSize = 4 * 10; // Byte size of one cube vertex.
2
- export const cubePositionOffset = 0;
3
- export const cubeColorOffset = 4 * 4; // Byte offset of cube vertex color attribute.
4
- export const cubeUVOffset = 4 * 8;
5
- export const cubeVertexCount = 36;
6
-
7
- // prettier-ignore
8
- export const cubeVertexArray = new Float32Array([
9
- // float4 position, float4 color, float2 uv,
10
- 1, -1, 1, 1, 1, 0, 1, 1, 0, 1,
11
- -1, -1, 1, 1, 0, 0, 1, 1, 1, 1,
12
- -1, -1, -1, 1, 0, 0, 0, 1, 1, 0,
13
- 1, -1, -1, 1, 1, 0, 0, 1, 0, 0,
14
- 1, -1, 1, 1, 1, 0, 1, 1, 0, 1,
15
- -1, -1, -1, 1, 0, 0, 0, 1, 1, 0,
16
-
17
- 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
18
- 1, -1, 1, 1, 1, 0, 1, 1, 1, 1,
19
- 1, -1, -1, 1, 1, 0, 0, 1, 1, 0,
20
- 1, 1, -1, 1, 1, 1, 0, 1, 0, 0,
21
- 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
22
- 1, -1, -1, 1, 1, 0, 0, 1, 1, 0,
23
-
24
- -1, 1, 1, 1, 0, 1, 1, 1, 0, 1,
25
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
26
- 1, 1, -1, 1, 1, 1, 0, 1, 1, 0,
27
- -1, 1, -1, 1, 0, 1, 0, 1, 0, 0,
28
- -1, 1, 1, 1, 0, 1, 1, 1, 0, 1,
29
- 1, 1, -1, 1, 1, 1, 0, 1, 1, 0,
30
-
31
- -1, -1, 1, 1, 0, 0, 1, 1, 0, 1,
32
- -1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
33
- -1, 1, -1, 1, 0, 1, 0, 1, 1, 0,
34
- -1, -1, -1, 1, 0, 0, 0, 1, 0, 0,
35
- -1, -1, 1, 1, 0, 0, 1, 1, 0, 1,
36
- -1, 1, -1, 1, 0, 1, 0, 1, 1, 0,
37
-
38
- 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
39
- -1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
40
- -1, -1, 1, 1, 0, 0, 1, 1, 1, 0,
41
- -1, -1, 1, 1, 0, 0, 1, 1, 1, 0,
42
- 1, -1, 1, 1, 1, 0, 1, 1, 0, 0,
43
- 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
44
-
45
- 1, -1, -1, 1, 1, 0, 0, 1, 0, 1,
46
- -1, -1, -1, 1, 0, 0, 0, 1, 1, 1,
47
- -1, 1, -1, 1, 0, 1, 0, 1, 1, 0,
48
- 1, 1, -1, 1, 1, 1, 0, 1, 0, 0,
49
- 1, -1, -1, 1, 1, 0, 0, 1, 0, 1,
50
- -1, 1, -1, 1, 0, 1, 0, 1, 1, 0,
51
- ]);
@@ -1,96 +0,0 @@
1
- import { vec3, vec2 } from "wgpu-matrix";
2
-
3
- // Defines what to pass to pipeline to render mesh
4
- export interface Renderable {
5
- vertexBuffer: GPUBuffer;
6
- indexBuffer: GPUBuffer;
7
- indexCount: number;
8
- bindGroup?: GPUBindGroup;
9
- }
10
-
11
- export interface Mesh {
12
- vertices: Float32Array;
13
- indices: Uint16Array | Uint32Array;
14
- vertexStride: number;
15
- }
16
-
17
- /**
18
- * @param {GPUDevice} device - A valid GPUDevice.
19
- * @param {Mesh} mesh - An indexed triangle-list mesh, containing its vertices, indices, and vertexStride (number of elements per vertex).
20
- * @param {boolean} storeVertices - A boolean flag indicating whether the vertexBuffer should be available to use as a storage buffer.
21
- * @returns {boolean} An object containing an array of bindGroups and the bindGroupLayout they implement.
22
- */
23
- export const createMeshRenderable = (
24
- device: GPUDevice,
25
- mesh: Mesh,
26
- storeVertices = false,
27
- storeIndices = false,
28
- ): Renderable => {
29
- // Define buffer usage
30
- const vertexBufferUsage = storeVertices
31
- ? GPUBufferUsage.VERTEX | GPUBufferUsage.STORAGE
32
- : GPUBufferUsage.VERTEX;
33
- const indexBufferUsage = storeIndices
34
- ? GPUBufferUsage.INDEX | GPUBufferUsage.STORAGE
35
- : GPUBufferUsage.INDEX;
36
-
37
- // Create vertex and index buffers
38
- const vertexBuffer = device.createBuffer({
39
- size: mesh.vertices.byteLength,
40
- usage: vertexBufferUsage,
41
- mappedAtCreation: true,
42
- });
43
- new Float32Array(vertexBuffer.getMappedRange()).set(mesh.vertices);
44
- vertexBuffer.unmap();
45
-
46
- const indexBuffer = device.createBuffer({
47
- size: mesh.indices.byteLength,
48
- usage: indexBufferUsage,
49
- mappedAtCreation: true,
50
- });
51
-
52
- // Determine whether index buffer is indices are in uint16 or uint32 format
53
- if (
54
- mesh.indices.byteLength ===
55
- mesh.indices.length * Uint16Array.BYTES_PER_ELEMENT
56
- ) {
57
- new Uint16Array(indexBuffer.getMappedRange()).set(mesh.indices);
58
- } else {
59
- new Uint32Array(indexBuffer.getMappedRange()).set(mesh.indices);
60
- }
61
-
62
- indexBuffer.unmap();
63
-
64
- return {
65
- vertexBuffer,
66
- indexBuffer,
67
- indexCount: mesh.indices.length,
68
- };
69
- };
70
-
71
- export const getMeshPosAtIndex = (mesh: Mesh, index: number) => {
72
- const arr = new Float32Array(
73
- mesh.vertices.buffer,
74
- index * mesh.vertexStride + 0,
75
- 3,
76
- );
77
- return vec3.fromValues(arr[0], arr[1], arr[2]);
78
- };
79
-
80
- export const getMeshNormalAtIndex = (mesh: Mesh, index: number) => {
81
- const arr = new Float32Array(
82
- mesh.vertices.buffer,
83
- index * mesh.vertexStride + 3 * Float32Array.BYTES_PER_ELEMENT,
84
- 3,
85
- );
86
- return vec3.fromValues(arr[0], arr[1], arr[2]);
87
- };
88
-
89
- export const getMeshUVAtIndex = (mesh: Mesh, index: number) => {
90
- const arr = new Float32Array(
91
- mesh.vertices.buffer,
92
- index * mesh.vertexStride + 6 * Float32Array.BYTES_PER_ELEMENT,
93
- 2,
94
- );
95
- return vec2.fromValues(arr[0], arr[1]);
96
- };
@@ -1,103 +0,0 @@
1
- import { vec3 } from "wgpu-matrix";
2
-
3
- export interface SphereMesh {
4
- vertices: Float32Array;
5
- indices: Uint16Array;
6
- }
7
-
8
- export const SphereLayout = {
9
- vertexStride: 8 * 4,
10
- positionsOffset: 0,
11
- normalOffset: 3 * 4,
12
- uvOffset: 6 * 4,
13
- };
14
-
15
- // Borrowed and simplified from https://github.com/mrdoob/three.js/blob/master/src/geometries/SphereGeometry.js
16
- export function createSphereMesh(
17
- radius: number,
18
- widthSegments = 32,
19
- heightSegments = 16,
20
- randomness = 0,
21
- ): SphereMesh {
22
- const vertices = [];
23
- const indices = [];
24
-
25
- widthSegments = Math.max(3, Math.floor(widthSegments));
26
- heightSegments = Math.max(2, Math.floor(heightSegments));
27
-
28
- const firstVertex = vec3.create();
29
- const vertex = vec3.create();
30
- const normal = vec3.create();
31
-
32
- let index = 0;
33
- const grid = [];
34
-
35
- // generate vertices, normals and uvs
36
- for (let iy = 0; iy <= heightSegments; iy++) {
37
- const verticesRow = [];
38
- const v = iy / heightSegments;
39
-
40
- // special case for the poles
41
- let uOffset = 0;
42
- if (iy === 0) {
43
- uOffset = 0.5 / widthSegments;
44
- } else if (iy === heightSegments) {
45
- uOffset = -0.5 / widthSegments;
46
- }
47
-
48
- for (let ix = 0; ix <= widthSegments; ix++) {
49
- const u = ix / widthSegments;
50
-
51
- // Poles should just use the same position all the way around.
52
- if (ix == widthSegments) {
53
- vec3.copy(firstVertex, vertex);
54
- } else if (ix == 0 || (iy != 0 && iy !== heightSegments)) {
55
- const rr = radius + (Math.random() - 0.5) * 2 * randomness * radius;
56
-
57
- // vertex
58
- vertex[0] = -rr * Math.cos(u * Math.PI * 2) * Math.sin(v * Math.PI);
59
- vertex[1] = rr * Math.cos(v * Math.PI);
60
- vertex[2] = rr * Math.sin(u * Math.PI * 2) * Math.sin(v * Math.PI);
61
-
62
- if (ix == 0) {
63
- vec3.copy(vertex, firstVertex);
64
- }
65
- }
66
-
67
- vertices.push(...vertex);
68
-
69
- // normal
70
- vec3.copy(vertex, normal);
71
- vec3.normalize(normal, normal);
72
- vertices.push(...normal);
73
-
74
- // uv
75
- vertices.push(u + uOffset, 1 - v);
76
- verticesRow.push(index++);
77
- }
78
-
79
- grid.push(verticesRow);
80
- }
81
-
82
- // indices
83
- for (let iy = 0; iy < heightSegments; iy++) {
84
- for (let ix = 0; ix < widthSegments; ix++) {
85
- const a = grid[iy][ix + 1];
86
- const b = grid[iy][ix];
87
- const c = grid[iy + 1][ix];
88
- const d = grid[iy + 1][ix + 1];
89
-
90
- if (iy !== 0) {
91
- indices.push(a, b, d);
92
- }
93
- if (iy !== heightSegments - 1) {
94
- indices.push(b, c, d);
95
- }
96
- }
97
- }
98
-
99
- return {
100
- vertices: new Float32Array(vertices),
101
- indices: new Uint16Array(indices),
102
- };
103
- }
@@ -1,44 +0,0 @@
1
- import dragonRawData from './stanfordDragonData';
2
- import { computeProjectedPlaneUVs, generateNormals } from './utils';
3
-
4
- const { positions, normals, triangles } = generateNormals(
5
- Math.PI,
6
- dragonRawData.positions as [number, number, number][],
7
- dragonRawData.cells as [number, number, number][]
8
- );
9
-
10
- const uvs = computeProjectedPlaneUVs(positions, 'xy');
11
-
12
- // Push indices for an additional ground plane
13
- triangles.push(
14
- [positions.length, positions.length + 2, positions.length + 1],
15
- [positions.length, positions.length + 1, positions.length + 3]
16
- );
17
-
18
- // Push vertex attributes for an additional ground plane
19
- // prettier-ignore
20
- positions.push(
21
- [-100, 20, -100], //
22
- [ 100, 20, 100], //
23
- [-100, 20, 100], //
24
- [ 100, 20, -100]
25
- );
26
- normals.push(
27
- [0, 1, 0], //
28
- [0, 1, 0], //
29
- [0, 1, 0], //
30
- [0, 1, 0]
31
- );
32
- uvs.push(
33
- [0, 0], //
34
- [1, 1], //
35
- [0, 1], //
36
- [1, 0]
37
- );
38
-
39
- export const mesh = {
40
- positions,
41
- triangles,
42
- normals,
43
- uvs,
44
- };