ris-framework 0.1.0 → 0.2.0-dev.12

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 (383) hide show
  1. package/CHANGELOG.md +42 -1
  2. package/README.md +27 -4
  3. package/dist/Framework.d.ts +34 -10
  4. package/dist/Framework.d.ts.map +1 -1
  5. package/dist/api/IFramework.d.ts +50 -6
  6. package/dist/api/IFramework.d.ts.map +1 -1
  7. package/dist/api/_export.d.ts +3 -1
  8. package/dist/api/_export.d.ts.map +1 -1
  9. package/dist/api/camera/CameraFactory.d.ts +3 -2
  10. package/dist/api/camera/CameraFactory.d.ts.map +1 -1
  11. package/dist/api/camera/ICamera.d.ts +5 -0
  12. package/dist/api/camera/ICamera.d.ts.map +1 -1
  13. package/dist/api/camera/ICameraFactory.d.ts +5 -6
  14. package/dist/api/camera/ICameraFactory.d.ts.map +1 -1
  15. package/dist/api/camera/OrthographicCamera.d.ts +7 -0
  16. package/dist/api/camera/OrthographicCamera.d.ts.map +1 -1
  17. package/dist/api/camera/PerspectiveCamera.d.ts +30 -6
  18. package/dist/api/camera/PerspectiveCamera.d.ts.map +1 -1
  19. package/dist/api/content/ContentManager.d.ts +15 -2
  20. package/dist/api/content/ContentManager.d.ts.map +1 -1
  21. package/dist/api/content/IContentManager.d.ts +35 -1
  22. package/dist/api/content/IContentManager.d.ts.map +1 -1
  23. package/dist/api/content/ShaderModuleContent.d.ts.map +1 -1
  24. package/dist/api/data/Color.d.ts +5 -0
  25. package/dist/api/data/Color.d.ts.map +1 -1
  26. package/dist/api/geometry/BaseGeometry.d.ts +9 -0
  27. package/dist/api/geometry/BaseGeometry.d.ts.map +1 -1
  28. package/dist/api/geometry/GeometryBuilder.d.ts +3 -1
  29. package/dist/api/geometry/GeometryBuilder.d.ts.map +1 -1
  30. package/dist/api/geometry/IGeometryBuilder.d.ts +24 -0
  31. package/dist/api/geometry/IGeometryBuilder.d.ts.map +1 -1
  32. package/dist/api/geometry/_export-geometry.d.ts +1 -0
  33. package/dist/api/geometry/_export-geometry.d.ts.map +1 -1
  34. package/dist/api/input/InputManager.d.ts +4 -0
  35. package/dist/api/input/InputManager.d.ts.map +1 -1
  36. package/dist/api/lights/AmbientLight.d.ts +35 -0
  37. package/dist/api/lights/AmbientLight.d.ts.map +1 -0
  38. package/dist/api/lights/DirectionalLight.d.ts +40 -0
  39. package/dist/api/lights/DirectionalLight.d.ts.map +1 -0
  40. package/dist/api/lights/LightFactory.d.ts +18 -0
  41. package/dist/api/lights/LightFactory.d.ts.map +1 -0
  42. package/dist/api/lights/LightId.d.ts +6 -0
  43. package/dist/api/lights/LightId.d.ts.map +1 -0
  44. package/dist/api/lights/LightsBuffer.d.ts +77 -0
  45. package/dist/api/lights/LightsBuffer.d.ts.map +1 -0
  46. package/dist/api/lights/PointLight.d.ts +59 -0
  47. package/dist/api/lights/PointLight.d.ts.map +1 -0
  48. package/dist/api/lights/_export.d.ts +6 -0
  49. package/dist/api/lights/_export.d.ts.map +1 -0
  50. package/dist/api/loaders/ObjGeometryMapper.d.ts +19 -0
  51. package/dist/api/loaders/ObjGeometryMapper.d.ts.map +1 -0
  52. package/dist/api/loaders/ObjLoader.d.ts +61 -0
  53. package/dist/api/loaders/ObjLoader.d.ts.map +1 -0
  54. package/dist/api/loaders/_export.d.ts +2 -0
  55. package/dist/api/loaders/_export.d.ts.map +1 -1
  56. package/dist/api/loaders/obj/ObjParser.d.ts +44 -0
  57. package/dist/api/loaders/obj/ObjParser.d.ts.map +1 -0
  58. package/dist/api/loaders/obj/ObjTypes.d.ts +119 -0
  59. package/dist/api/loaders/obj/ObjTypes.d.ts.map +1 -0
  60. package/dist/api/loaders/obj/index.d.ts +3 -0
  61. package/dist/api/loaders/obj/index.d.ts.map +1 -0
  62. package/dist/api/material/ForwardBlinnPhongMaterial.d.ts +138 -0
  63. package/dist/api/material/ForwardBlinnPhongMaterial.d.ts.map +1 -0
  64. package/dist/api/material/ICameraMaterial.d.ts +18 -0
  65. package/dist/api/material/ICameraMaterial.d.ts.map +1 -0
  66. package/dist/api/material/ILightsMaterial.d.ts +26 -0
  67. package/dist/api/material/ILightsMaterial.d.ts.map +1 -0
  68. package/dist/api/material/IMaterial.d.ts +13 -10
  69. package/dist/api/material/IMaterial.d.ts.map +1 -1
  70. package/dist/api/material/IMaterialFactory.d.ts +17 -2
  71. package/dist/api/material/IMaterialFactory.d.ts.map +1 -1
  72. package/dist/api/material/InspectTextureMipsMaterial.d.ts +18 -9
  73. package/dist/api/material/InspectTextureMipsMaterial.d.ts.map +1 -1
  74. package/dist/api/material/MaterialFactory.d.ts +6 -0
  75. package/dist/api/material/MaterialFactory.d.ts.map +1 -1
  76. package/dist/api/material/SpriteMaterial.d.ts +51 -0
  77. package/dist/api/material/SpriteMaterial.d.ts.map +1 -0
  78. package/dist/api/material/UnlitMaterial.d.ts +32 -13
  79. package/dist/api/material/UnlitMaterial.d.ts.map +1 -1
  80. package/dist/api/material/_export.d.ts +4 -0
  81. package/dist/api/material/_export.d.ts.map +1 -1
  82. package/dist/api/meshes/IMesh.d.ts +31 -6
  83. package/dist/api/meshes/IMesh.d.ts.map +1 -1
  84. package/dist/api/meshes/IMeshFactory.d.ts +30 -4
  85. package/dist/api/meshes/IMeshFactory.d.ts.map +1 -1
  86. package/dist/api/meshes/IRenderableMesh.d.ts +47 -0
  87. package/dist/api/meshes/IRenderableMesh.d.ts.map +1 -0
  88. package/dist/api/meshes/Mesh.d.ts +14 -8
  89. package/dist/api/meshes/Mesh.d.ts.map +1 -1
  90. package/dist/api/meshes/MeshFactory.d.ts +10 -3
  91. package/dist/api/meshes/MeshFactory.d.ts.map +1 -1
  92. package/dist/api/meshes/QuadMesh.d.ts +5 -3
  93. package/dist/api/meshes/QuadMesh.d.ts.map +1 -1
  94. package/dist/api/meshes/RenderableMesh.d.ts +95 -0
  95. package/dist/api/meshes/RenderableMesh.d.ts.map +1 -0
  96. package/dist/api/meshes/_export.d.ts +2 -0
  97. package/dist/api/meshes/_export.d.ts.map +1 -1
  98. package/dist/api/rendering/IGraphicsDeviceFeatures.d.ts +8 -2
  99. package/dist/api/rendering/IGraphicsDeviceFeatures.d.ts.map +1 -1
  100. package/dist/api/rendering/IRenderer.d.ts +28 -1
  101. package/dist/api/rendering/IRenderer.d.ts.map +1 -1
  102. package/dist/api/rendering/enums.d.ts +7 -0
  103. package/dist/api/rendering/enums.d.ts.map +1 -1
  104. package/dist/api/rendering/render-pipelines/IForwardBlinnPhongRenderPipeline.d.ts +56 -0
  105. package/dist/api/rendering/render-pipelines/IForwardBlinnPhongRenderPipeline.d.ts.map +1 -0
  106. package/dist/api/rendering/render-pipelines/IRenderPipeline.d.ts +3 -0
  107. package/dist/api/rendering/render-pipelines/IRenderPipeline.d.ts.map +1 -1
  108. package/dist/api/rendering/render-pipelines/IRenderPipelineFactory.d.ts +29 -0
  109. package/dist/api/rendering/render-pipelines/IRenderPipelineFactory.d.ts.map +1 -1
  110. package/dist/api/rendering/render-pipelines/_export-render-pipelines.d.ts +1 -0
  111. package/dist/api/rendering/render-pipelines/_export-render-pipelines.d.ts.map +1 -1
  112. package/dist/api/rendering/renderer-interface.d.ts +1 -31
  113. package/dist/api/rendering/renderer-interface.d.ts.map +1 -1
  114. package/dist/api/rendering/renderpass/RenderPassDescriptor.d.ts +2 -6
  115. package/dist/api/rendering/renderpass/RenderPassDescriptor.d.ts.map +1 -1
  116. package/dist/api/rendering/swapchain/ISwapChain.d.ts +1 -3
  117. package/dist/api/rendering/swapchain/ISwapChain.d.ts.map +1 -1
  118. package/dist/api/rendering/texture/TextureFormat.d.ts +88 -14
  119. package/dist/api/rendering/texture/TextureFormat.d.ts.map +1 -1
  120. package/dist/api/rendering/texture/TextureUtilities.d.ts +23 -0
  121. package/dist/api/rendering/texture/TextureUtilities.d.ts.map +1 -1
  122. package/dist/api/scene/Scene.d.ts +113 -0
  123. package/dist/api/scene/Scene.d.ts.map +1 -0
  124. package/dist/api/scene/SceneMesh.d.ts +27 -0
  125. package/dist/api/scene/SceneMesh.d.ts.map +1 -0
  126. package/dist/api/shader/IShaderModuleLoader.d.ts +4 -1
  127. package/dist/api/shader/IShaderModuleLoader.d.ts.map +1 -1
  128. package/dist/api/shader/{shader-loader.d.ts → ShaderLoader.d.ts} +1 -1
  129. package/dist/api/shader/ShaderLoader.d.ts.map +1 -0
  130. package/dist/api/sprites/SpriteBatchDrawable.d.ts +1 -1
  131. package/dist/api/sprites/SpriteBatchDrawable.d.ts.map +1 -1
  132. package/dist/api/sprites/SpriteBatchMesh.d.ts +14 -1
  133. package/dist/api/sprites/SpriteBatchMesh.d.ts.map +1 -1
  134. package/dist/api/utilities/AlignUtilities.d.ts.map +1 -1
  135. package/dist/api/utilities/GeometryUtilities.d.ts.map +1 -1
  136. package/dist/api/window/WindowManager.d.ts +4 -0
  137. package/dist/api/window/WindowManager.d.ts.map +1 -1
  138. package/dist/core/rendering/ARenderer.d.ts +5 -5
  139. package/dist/core/rendering/ARenderer.d.ts.map +1 -1
  140. package/dist/core/rendering/vertex-buffer-layout.d.ts +1 -0
  141. package/dist/core/rendering/vertex-buffer-layout.d.ts.map +1 -1
  142. package/dist/index.d.ts +0 -1
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js +9238 -4595
  145. package/dist/webgl/WebGLGraphicsDeviceFeatures.d.ts +4 -0
  146. package/dist/webgl/WebGLGraphicsDeviceFeatures.d.ts.map +1 -1
  147. package/dist/webgl/WebGlGraphicsDevice.d.ts.map +1 -1
  148. package/dist/webgl/WebGlRenderer.d.ts +1 -3
  149. package/dist/webgl/WebGlRenderer.d.ts.map +1 -1
  150. package/dist/webgl/lights/WebGlAmbientLightFactory.d.ts +17 -0
  151. package/dist/webgl/lights/WebGlAmbientLightFactory.d.ts.map +1 -0
  152. package/dist/webgl/lights/WebGlLightsBuffer.d.ts +59 -0
  153. package/dist/webgl/lights/WebGlLightsBuffer.d.ts.map +1 -0
  154. package/dist/webgl/render-pipelines/AWebGlRenderPipeline.d.ts +3 -1
  155. package/dist/webgl/render-pipelines/AWebGlRenderPipeline.d.ts.map +1 -1
  156. package/dist/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.d.ts +5 -0
  157. package/dist/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.d.ts.map +1 -1
  158. package/dist/webgl/render-pipelines/WebGlRenderPipelineFactory.d.ts +3 -1
  159. package/dist/webgl/render-pipelines/WebGlRenderPipelineFactory.d.ts.map +1 -1
  160. package/dist/webgl/render-pipelines/inspect/WebGlInspectTextureMipsRenderPipeline.d.ts +3 -1
  161. package/dist/webgl/render-pipelines/inspect/WebGlInspectTextureMipsRenderPipeline.d.ts.map +1 -1
  162. package/dist/webgl/render-pipelines/material/WebGlBlinnPhongRenderPipeline.d.ts +88 -0
  163. package/dist/webgl/render-pipelines/material/WebGlBlinnPhongRenderPipeline.d.ts.map +1 -0
  164. package/dist/webgl/render-pipelines/material/WebGlUnlitRenderPipeline.d.ts +3 -1
  165. package/dist/webgl/render-pipelines/material/WebGlUnlitRenderPipeline.d.ts.map +1 -1
  166. package/dist/webgl/render-pipelines/sprite/WebGlSpriteRenderPipeline.d.ts +3 -1
  167. package/dist/webgl/render-pipelines/sprite/WebGlSpriteRenderPipeline.d.ts.map +1 -1
  168. package/dist/webgl/shader/WebGlShaderModule.d.ts +4 -1
  169. package/dist/webgl/shader/WebGlShaderModule.d.ts.map +1 -1
  170. package/dist/webgl/shader/WebGlShaderModuleLoader.d.ts +16 -5
  171. package/dist/webgl/shader/WebGlShaderModuleLoader.d.ts.map +1 -1
  172. package/dist/webgl/swap-chain/WebGlSwapChain.d.ts +3 -2
  173. package/dist/webgl/swap-chain/WebGlSwapChain.d.ts.map +1 -1
  174. package/dist/webgl/texture/WebGlTexture2D.d.ts +8 -1
  175. package/dist/webgl/texture/WebGlTexture2D.d.ts.map +1 -1
  176. package/dist/webgl/texture/WebGlTextureFactory.d.ts +7 -0
  177. package/dist/webgl/texture/WebGlTextureFactory.d.ts.map +1 -1
  178. package/dist/webgl/utilities/WebGlConstants.d.ts +91 -0
  179. package/dist/webgl/utilities/WebGlConstants.d.ts.map +1 -0
  180. package/dist/webgl/utilities/WebGlConverter.d.ts +0 -7
  181. package/dist/webgl/utilities/WebGlConverter.d.ts.map +1 -1
  182. package/dist/webgl/utilities/WebGlErrorUtilities.d.ts +10 -0
  183. package/dist/webgl/utilities/WebGlErrorUtilities.d.ts.map +1 -0
  184. package/dist/webgl/utilities/WebGlTextureUtilities.d.ts.map +1 -1
  185. package/dist/webgl/utilities/WebGlUtilities.d.ts +3 -0
  186. package/dist/webgl/utilities/WebGlUtilities.d.ts.map +1 -1
  187. package/dist/webgl/utilities/webgl-filter-anisotropic-utilities.d.ts +0 -1
  188. package/dist/webgl/utilities/webgl-filter-anisotropic-utilities.d.ts.map +1 -1
  189. package/dist/webgpu/WebGpuGpuInfo.d.ts +28 -0
  190. package/dist/webgpu/WebGpuGpuInfo.d.ts.map +1 -0
  191. package/dist/webgpu/WebGpuGraphicsDevice.d.ts +80 -0
  192. package/dist/webgpu/WebGpuGraphicsDevice.d.ts.map +1 -0
  193. package/dist/webgpu/WebGpuGraphicsDeviceFeatures.d.ts +26 -0
  194. package/dist/webgpu/WebGpuGraphicsDeviceFeatures.d.ts.map +1 -0
  195. package/dist/webgpu/WebGpuRenderer.d.ts +26 -0
  196. package/dist/webgpu/WebGpuRenderer.d.ts.map +1 -0
  197. package/dist/webgpu/WebGpuTypes.d.ts +355 -0
  198. package/dist/webgpu/WebGpuTypes.d.ts.map +1 -0
  199. package/dist/webgpu/blending/WebGpuBlendState.d.ts +30 -0
  200. package/dist/webgpu/blending/WebGpuBlendState.d.ts.map +1 -0
  201. package/dist/webgpu/buffers/WebGpuBuffersFactory.d.ts +20 -0
  202. package/dist/webgpu/buffers/WebGpuBuffersFactory.d.ts.map +1 -0
  203. package/dist/webgpu/buffers/WebGpuIndexBuffer.d.ts +46 -0
  204. package/dist/webgpu/buffers/WebGpuIndexBuffer.d.ts.map +1 -0
  205. package/dist/webgpu/buffers/WebGpuUniformBuffer.d.ts +43 -0
  206. package/dist/webgpu/buffers/WebGpuUniformBuffer.d.ts.map +1 -0
  207. package/dist/webgpu/buffers/WebGpuVertexBuffer.d.ts +49 -0
  208. package/dist/webgpu/buffers/WebGpuVertexBuffer.d.ts.map +1 -0
  209. package/dist/webgpu/primitive/WebGpuPrimitiveState.d.ts +32 -0
  210. package/dist/webgpu/primitive/WebGpuPrimitiveState.d.ts.map +1 -0
  211. package/dist/webgpu/render-pass/WebGpuRenderPass.d.ts +28 -0
  212. package/dist/webgpu/render-pass/WebGpuRenderPass.d.ts.map +1 -0
  213. package/dist/webgpu/render-pipelines/AWebGpuRenderPipeline.d.ts +50 -0
  214. package/dist/webgpu/render-pipelines/AWebGpuRenderPipeline.d.ts.map +1 -0
  215. package/dist/webgpu/render-pipelines/WebGpuMainRenderTargetRenderPipeline.d.ts +34 -0
  216. package/dist/webgpu/render-pipelines/WebGpuMainRenderTargetRenderPipeline.d.ts.map +1 -0
  217. package/dist/webgpu/render-pipelines/WebGpuRenderPipelineFactory.d.ts +26 -0
  218. package/dist/webgpu/render-pipelines/WebGpuRenderPipelineFactory.d.ts.map +1 -0
  219. package/dist/webgpu/render-pipelines/material/AWebGpuMeshRenderPipeline.d.ts +72 -0
  220. package/dist/webgpu/render-pipelines/material/AWebGpuMeshRenderPipeline.d.ts.map +1 -0
  221. package/dist/webgpu/render-pipelines/material/WebGpuUnlitRenderPipeline.d.ts +40 -0
  222. package/dist/webgpu/render-pipelines/material/WebGpuUnlitRenderPipeline.d.ts.map +1 -0
  223. package/dist/webgpu/sampler/WebGpuSampler.d.ts +39 -0
  224. package/dist/webgpu/sampler/WebGpuSampler.d.ts.map +1 -0
  225. package/dist/webgpu/shader/WebGpuShaderModule.d.ts +29 -0
  226. package/dist/webgpu/shader/WebGpuShaderModule.d.ts.map +1 -0
  227. package/dist/webgpu/shader/WebGpuShaderModuleLoader.d.ts +21 -0
  228. package/dist/webgpu/shader/WebGpuShaderModuleLoader.d.ts.map +1 -0
  229. package/dist/webgpu/shader/WgslShaderContent.d.ts +9 -0
  230. package/dist/webgpu/shader/WgslShaderContent.d.ts.map +1 -0
  231. package/dist/webgpu/swap-chain/WebGpuSwapChain.d.ts +41 -0
  232. package/dist/webgpu/swap-chain/WebGpuSwapChain.d.ts.map +1 -0
  233. package/dist/webgpu/texture/WebGpuTexture2D.d.ts +47 -0
  234. package/dist/webgpu/texture/WebGpuTexture2D.d.ts.map +1 -0
  235. package/dist/webgpu/texture/WebGpuTextureFactory.d.ts +21 -0
  236. package/dist/webgpu/texture/WebGpuTextureFactory.d.ts.map +1 -0
  237. package/dist/webgpu/texture/WebGpuTextureView.d.ts +25 -0
  238. package/dist/webgpu/texture/WebGpuTextureView.d.ts.map +1 -0
  239. package/dist/webgpu/utilities/WebGpuConverter.d.ts +45 -0
  240. package/dist/webgpu/utilities/WebGpuConverter.d.ts.map +1 -0
  241. package/package.json +4 -4
  242. package/shaders/glsl/forward_blinn_phong_material_fs.glsl +110 -0
  243. package/shaders/glsl/forward_blinn_phong_material_vs.glsl +32 -0
  244. package/shaders/glsl/main_render_target_flip_y_fs.glsl +35 -1
  245. package/shaders/glsl/sprite_fs.glsl +1 -1
  246. package/shaders/glsl/unlit_material_fs.glsl +1 -1
  247. package/shaders/wgsl/forward_blinn_phong_material.wgsl +150 -0
  248. package/shaders/wgsl/inspect_texture_mips.wgsl +51 -0
  249. package/shaders/wgsl/main_frame_buffer.wgsl +35 -0
  250. package/shaders/wgsl/main_render_target_flip_y.wgsl +35 -0
  251. package/shaders/wgsl/sprite.wgsl +40 -0
  252. package/shaders/wgsl/unlit_material.wgsl +49 -0
  253. package/src/Framework.ts +156 -48
  254. package/src/api/IFramework.ts +63 -6
  255. package/src/api/_export.ts +3 -1
  256. package/src/api/camera/CameraFactory.ts +6 -6
  257. package/src/api/camera/ICamera.ts +6 -0
  258. package/src/api/camera/ICameraFactory.ts +5 -10
  259. package/src/api/camera/OrthographicCamera.ts +23 -1
  260. package/src/api/camera/PerspectiveCamera.ts +60 -15
  261. package/src/api/content/ContentManager.ts +78 -16
  262. package/src/api/content/IContentManager.ts +37 -1
  263. package/src/api/content/ShaderModuleContent.ts +9 -0
  264. package/src/api/data/Color.ts +7 -1
  265. package/src/api/geometry/BaseGeometry.ts +23 -0
  266. package/src/api/geometry/GeometryBuilder.ts +14 -2
  267. package/src/api/geometry/IGeometryBuilder.ts +31 -1
  268. package/src/api/geometry/_export-geometry.ts +2 -1
  269. package/src/api/input/InputManager.ts +14 -5
  270. package/src/api/lights/AmbientLight.ts +53 -0
  271. package/src/api/lights/DirectionalLight.ts +60 -0
  272. package/src/api/lights/LightFactory.ts +21 -0
  273. package/src/api/lights/LightId.ts +9 -0
  274. package/src/api/lights/LightsBuffer.ts +94 -0
  275. package/src/api/lights/PointLight.ts +91 -0
  276. package/src/api/lights/_export.ts +5 -0
  277. package/src/api/loaders/ObjGeometryMapper.ts +28 -0
  278. package/src/api/loaders/ObjLoader.ts +126 -0
  279. package/src/api/loaders/_export.ts +3 -1
  280. package/src/api/loaders/obj/ObjParser.ts +301 -0
  281. package/src/api/loaders/obj/ObjTypes.ts +142 -0
  282. package/src/api/loaders/obj/index.ts +5 -0
  283. package/src/api/material/ForwardBlinnPhongMaterial.ts +328 -0
  284. package/src/api/material/ICameraMaterial.ts +22 -0
  285. package/src/api/material/ILightsMaterial.ts +32 -0
  286. package/src/api/material/IMaterial.ts +13 -10
  287. package/src/api/material/IMaterialFactory.ts +19 -2
  288. package/src/api/material/InspectTextureMipsMaterial.ts +65 -26
  289. package/src/api/material/MaterialFactory.ts +12 -0
  290. package/src/api/material/SpriteMaterial.ts +83 -0
  291. package/src/api/material/UnlitMaterial.ts +105 -32
  292. package/src/api/material/_export.ts +5 -1
  293. package/src/api/meshes/IMesh.ts +40 -6
  294. package/src/api/meshes/IMeshFactory.ts +33 -4
  295. package/src/api/meshes/IRenderableMesh.ts +58 -0
  296. package/src/api/meshes/Mesh.ts +50 -43
  297. package/src/api/meshes/MeshFactory.ts +37 -4
  298. package/src/api/meshes/QuadMesh.ts +6 -4
  299. package/src/api/meshes/RenderableMesh.ts +207 -0
  300. package/src/api/meshes/_export.ts +6 -4
  301. package/src/api/rendering/IGraphicsDeviceFeatures.ts +28 -21
  302. package/src/api/rendering/IRenderer.ts +34 -1
  303. package/src/api/rendering/enums.ts +10 -0
  304. package/src/api/rendering/render-pipelines/IForwardBlinnPhongRenderPipeline.ts +66 -0
  305. package/src/api/rendering/render-pipelines/IRenderPipeline.ts +4 -0
  306. package/src/api/rendering/render-pipelines/IRenderPipelineFactory.ts +39 -0
  307. package/src/api/rendering/render-pipelines/_export-render-pipelines.ts +2 -1
  308. package/src/api/rendering/renderer-interface.ts +1 -36
  309. package/src/api/rendering/renderpass/RenderPassDescriptor.ts +10 -14
  310. package/src/api/rendering/swapchain/ISwapChain.ts +1 -3
  311. package/src/api/rendering/texture/TextureFormat.ts +128 -14
  312. package/src/api/rendering/texture/TextureUtilities.ts +225 -10
  313. package/src/api/scene/Scene.ts +297 -0
  314. package/src/api/scene/SceneMesh.ts +61 -0
  315. package/src/api/shader/IShaderModuleLoader.ts +2 -1
  316. package/src/api/sprites/SpriteBatchDrawable.ts +12 -16
  317. package/src/api/sprites/SpriteBatchMesh.ts +22 -3
  318. package/src/api/utilities/AlignUtilities.ts +2 -1
  319. package/src/api/utilities/GeometryUtilities.ts +2 -0
  320. package/src/api/window/WindowManager.ts +23 -3
  321. package/src/core/rendering/ARenderer.ts +24 -15
  322. package/src/core/rendering/vertex-buffer-layout.ts +32 -1
  323. package/src/index.ts +0 -1
  324. package/src/main.ts +2 -4
  325. package/src/webgl/WebGLGraphicsDeviceFeatures.ts +12 -2
  326. package/src/webgl/WebGlGpuInfo.ts +1 -1
  327. package/src/webgl/WebGlGraphicsDevice.ts +0 -1
  328. package/src/webgl/WebGlRenderer.ts +2 -5
  329. package/src/webgl/lights/WebGlAmbientLightFactory.ts +35 -0
  330. package/src/webgl/lights/WebGlLightsBuffer.ts +225 -0
  331. package/src/webgl/render-pipelines/AWebGlRenderPipeline.ts +7 -1
  332. package/src/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.ts +21 -1
  333. package/src/webgl/render-pipelines/WebGlRenderPipelineFactory.ts +24 -2
  334. package/src/webgl/render-pipelines/inspect/WebGlInspectTextureMipsRenderPipeline.ts +16 -6
  335. package/src/webgl/render-pipelines/material/WebGlBlinnPhongRenderPipeline.ts +300 -0
  336. package/src/webgl/render-pipelines/material/WebGlUnlitRenderPipeline.ts +16 -6
  337. package/src/webgl/render-pipelines/sprite/WebGlSpriteRenderPipeline.ts +11 -7
  338. package/src/webgl/shader/WebGlShaderModule.ts +11 -4
  339. package/src/webgl/shader/WebGlShaderModuleLoader.ts +29 -10
  340. package/src/webgl/swap-chain/WebGlSwapChain.ts +7 -6
  341. package/src/webgl/texture/WebGlTexture2D.ts +19 -5
  342. package/src/webgl/texture/WebGlTextureFactory.ts +49 -7
  343. package/src/webgl/utilities/WebGlConstants.ts +136 -0
  344. package/src/webgl/utilities/WebGlConverter.ts +91 -22
  345. package/src/webgl/utilities/WebGlErrorUtilities.ts +15 -0
  346. package/src/webgl/utilities/WebGlTextureUtilities.ts +5 -2
  347. package/src/webgl/utilities/WebGlUtilities.ts +4 -0
  348. package/src/webgl/utilities/webgl-filter-anisotropic-utilities.ts +9 -6
  349. package/src/webgpu/WebGpuGpuInfo.ts +61 -0
  350. package/src/webgpu/WebGpuGraphicsDevice.ts +199 -0
  351. package/src/webgpu/WebGpuGraphicsDeviceFeatures.ts +41 -0
  352. package/src/webgpu/WebGpuRenderer.ts +49 -0
  353. package/src/webgpu/WebGpuTypes.ts +288 -0
  354. package/src/webgpu/blending/WebGpuBlendState.ts +53 -0
  355. package/src/webgpu/buffers/WebGpuBuffersFactory.ts +46 -0
  356. package/src/webgpu/buffers/WebGpuIndexBuffer.ts +118 -0
  357. package/src/webgpu/buffers/WebGpuUniformBuffer.ts +102 -0
  358. package/src/webgpu/buffers/WebGpuVertexBuffer.ts +119 -0
  359. package/src/webgpu/primitive/WebGpuPrimitiveState.ts +52 -0
  360. package/src/webgpu/render-pass/WebGpuRenderPass.ts +131 -0
  361. package/src/webgpu/render-pipelines/AWebGpuRenderPipeline.ts +123 -0
  362. package/src/webgpu/render-pipelines/WebGpuMainRenderTargetRenderPipeline.ts +119 -0
  363. package/src/webgpu/render-pipelines/WebGpuRenderPipelineFactory.ts +66 -0
  364. package/src/webgpu/render-pipelines/material/AWebGpuMeshRenderPipeline.ts +249 -0
  365. package/src/webgpu/render-pipelines/material/WebGpuUnlitRenderPipeline.ts +101 -0
  366. package/src/webgpu/sampler/WebGpuSampler.ts +84 -0
  367. package/src/webgpu/shader/WebGpuShaderModule.ts +65 -0
  368. package/src/webgpu/shader/WebGpuShaderModuleLoader.ts +38 -0
  369. package/src/webgpu/shader/WgslShaderContent.ts +20 -0
  370. package/src/webgpu/swap-chain/WebGpuSwapChain.ts +93 -0
  371. package/src/webgpu/texture/WebGpuTexture2D.ts +197 -0
  372. package/src/webgpu/texture/WebGpuTextureFactory.ts +118 -0
  373. package/src/webgpu/texture/WebGpuTextureView.ts +43 -0
  374. package/src/webgpu/utilities/WebGpuConverter.ts +299 -0
  375. package/src/wgsl-raw.d.ts +4 -0
  376. package/dist/api/FrameworkConfiguration.d.ts +0 -23
  377. package/dist/api/FrameworkConfiguration.d.ts.map +0 -1
  378. package/dist/api/IFrameworkConfiguration.d.ts +0 -25
  379. package/dist/api/IFrameworkConfiguration.d.ts.map +0 -1
  380. package/dist/api/shader/shader-loader.d.ts.map +0 -1
  381. package/src/api/FrameworkConfiguration.ts +0 -29
  382. package/src/api/IFrameworkConfiguration.ts +0 -30
  383. /package/src/api/shader/{shader-loader.ts → ShaderLoader.ts} +0 -0
@@ -0,0 +1,83 @@
1
+ import type { GeometryFormat } from "../geometry/GeometryFormat.ts";
2
+ import type {IRenderableMesh} from "../meshes/IRenderableMesh.ts";
3
+ import type { IVertexBuffer } from "../rendering/buffers/IVertexBuffer.ts";
4
+ import type { IIndexBuffer } from "../rendering/buffers/IIndexBuffer.ts";
5
+ import type { ITexture2D } from "../rendering/texture/ITexture2D.ts";
6
+ import type { ISampler } from "../rendering/sampler/ISampler.ts";
7
+ import type { IFramework } from "../IFramework.ts";
8
+ import type { IUniformBuffer } from "../rendering/buffers/IUniformBuffer.ts";
9
+ import type { ISpriteRenderPipeline } from "../rendering/render-pipelines/ISpriteRenderPipeline.ts";
10
+ import type { IMaterial } from "./IMaterial.ts";
11
+
12
+ /** The sprite material descriptor. */
13
+ export interface SpriteMaterialDescriptor {
14
+
15
+ /** The projection view buffer. Shared, it is not disposed by the material. */
16
+ projectionViewBuffer: IUniformBuffer;
17
+
18
+ /** The sprite texture. */
19
+ texture: ITexture2D;
20
+
21
+ /** The texture sampler. */
22
+ sampler: ISampler;
23
+ }
24
+
25
+ /**
26
+ * The sprite material.
27
+ */
28
+ export class SpriteMaterial implements IMaterial {
29
+
30
+ private readonly _renderPipeline: ISpriteRenderPipeline;
31
+
32
+ /**
33
+ * The constructor.
34
+ * @param framework - The framework.
35
+ * @param descriptor - The sprite material descriptor.
36
+ */
37
+ public constructor(framework: IFramework, descriptor: SpriteMaterialDescriptor) {
38
+ this._renderPipeline = framework.renderPipelineFactory.createSpriteRenderPipeline(descriptor.projectionViewBuffer);
39
+ this._renderPipeline.textureSampler = descriptor.sampler;
40
+ this._renderPipeline.spriteTexture = descriptor.texture;
41
+ }
42
+
43
+ /** @inheritDoc */
44
+ public get geometryFormat(): GeometryFormat {
45
+ return this._renderPipeline.geometryFormat;
46
+ }
47
+
48
+ /** The sprite texture. */
49
+ public get texture(): ITexture2D {
50
+ return this._renderPipeline.spriteTexture;
51
+ }
52
+
53
+ /** The sprite texture. */
54
+ public set texture(value: ITexture2D) {
55
+ this._renderPipeline.spriteTexture = value;
56
+ }
57
+
58
+ /** @inheritDoc */
59
+ public beforeRender(): void {
60
+ // Nothing to do
61
+ }
62
+
63
+ /** @inheritDoc */
64
+ public renderMesh(mesh: IRenderableMesh): void {
65
+ this.render(mesh.vertexBuffer!, mesh.indexBuffer!, mesh.indexCount ?? -1, mesh.indexStart ?? 0);
66
+ }
67
+
68
+ /**
69
+ * Renders the material.
70
+ * @param vertexBuffer - The vertex buffer.
71
+ * @param indexBuffer - The index buffer.
72
+ * @param indicesCount - The number of indices to draw. If -1 draws all indices.
73
+ * @param indicesOffset - Indices offset. Defaults to 0.
74
+ */
75
+ public render(vertexBuffer: IVertexBuffer, indexBuffer: IIndexBuffer, indicesCount?: number, indicesOffset?: number): void {
76
+ this._renderPipeline.render(vertexBuffer, indexBuffer, indicesCount, indicesOffset);
77
+ }
78
+
79
+ /** @inheritDoc */
80
+ public dispose(): void {
81
+ this._renderPipeline.dispose();
82
+ }
83
+ }
@@ -1,5 +1,6 @@
1
+ import type {ICameraMaterial} from "./ICameraMaterial.ts";
1
2
 
2
- import type { IMesh } from "../meshes/IMesh.ts";
3
+ import type {IRenderableMesh} from "../meshes/IRenderableMesh.ts";
3
4
  import type { ITexture2D } from "../rendering/texture/ITexture2D.ts";
4
5
  import type { ISampler } from "../rendering/sampler/ISampler.ts";
5
6
  import {mat4} from "gl-matrix";
@@ -12,6 +13,7 @@ import {BufferUsage} from "../rendering/buffers/BufferUsage.ts";
12
13
  import {Color} from "../data/Color.ts";
13
14
  import type { IUnlitRenderPipeline } from "../rendering/render-pipelines/IUnlitRenderPipeline.ts";
14
15
  import type { IPrimitiveState } from "../rendering/primitive/IPrimitiveState.ts";
16
+ import type {ICamera} from "../camera/ICamera.ts";
15
17
 
16
18
  /** The additional material config options */
17
19
  export class UnlitMaterialDescriptor {
@@ -19,26 +21,32 @@ export class UnlitMaterialDescriptor {
19
21
  /** The primitive state. */
20
22
  public primitiveState?: IPrimitiveState;
21
23
 
22
- /** The projection view buffer to use */
23
- public projectionViewBuffer?: IUniformBuffer;
24
+ /** The camera used to render this material. */
25
+ public camera?: ICamera;
24
26
  }
25
27
 
26
28
 
27
29
  /**
28
30
  * Unlit material.
29
31
  */
30
- export class UnlitMaterial {
32
+ export class UnlitMaterial implements ICameraMaterial {
31
33
 
32
34
  private readonly _framework: IFramework;
33
35
  private _color = Color.white();
34
36
  private _materialData = [1,1,1,1];
35
- private _pipeline: IUnlitRenderPipeline;
37
+ /** Created when the model buffer is assigned (the pipeline requires one). */
38
+ private _pipeline?: IUnlitRenderPipeline;
39
+ private readonly _primitiveState?: IPrimitiveState;
40
+ /** Texture and sampler set before the pipeline exists; applied when it is created. */
41
+ private _pendingTexture?: ITexture2D;
42
+ private _pendingSampler?: ISampler;
43
+ private _samplerSet = false;
36
44
  private _projectionViewBuffer: IUniformBuffer;
37
45
  /** False when the projection view buffer came from the descriptor. The caller owns that one. */
38
- private readonly _ownsProjectionViewBuffer: boolean;
46
+ private _ownsProjectionViewBuffer: boolean;
47
+ private _camera?: ICamera;
39
48
  private _materialBuffer: IUniformBuffer;
40
- private _modelBuffer: IUniformBuffer;
41
- private _previousModelMatrix = mat4.create();
49
+ private _modelBuffer?: IUniformBuffer;
42
50
 
43
51
  /**
44
52
  * The constructor.
@@ -47,18 +55,59 @@ export class UnlitMaterial {
47
55
  */
48
56
  public constructor(framework: IFramework, config? :UnlitMaterialDescriptor) {
49
57
  this._framework = framework;
50
- void this._framework;
51
58
  const usage = BufferUsage.UNIFORM | BufferUsage.COPY_DST;
52
- this._ownsProjectionViewBuffer = !config?.projectionViewBuffer;
53
- this._projectionViewBuffer = config?.projectionViewBuffer ?? framework.bufferFactory.createUniformBuffer(this._previousModelMatrix, usage);
54
- this._modelBuffer = framework.bufferFactory.createUniformBuffer(this._previousModelMatrix, usage);
59
+ this._camera = config?.camera;
60
+ // Without a camera an own zero buffer is bound, so rendering before the scene assigns one does not crash.
61
+ this._ownsProjectionViewBuffer = !config?.camera?.projectionViewBuffer;
62
+ this._projectionViewBuffer = config?.camera?.projectionViewBuffer ?? framework.bufferFactory.createUniformBuffer(mat4.create(), usage);
55
63
  this._materialBuffer = framework.bufferFactory.createUniformBuffer(this._materialData, usage);
56
- this._pipeline = framework.renderPipelineFactory.createUnlitRenderPipeline(
64
+ this._primitiveState = config?.primitiveState;
65
+ // The pipeline is created once a model buffer is assigned (see modelBuffer).
66
+ }
67
+
68
+ /** Creates the pipeline with the current bindings. */
69
+ private _createPipeline(modelBuffer: IUniformBuffer): IUnlitRenderPipeline {
70
+ const pipeline = this._framework.renderPipelineFactory.createUnlitRenderPipeline(
57
71
  this._projectionViewBuffer,
58
- this._modelBuffer,
72
+ modelBuffer,
59
73
  this._materialBuffer,
60
- config?.primitiveState
74
+ this._primitiveState
61
75
  );
76
+ if (this._pendingTexture) {
77
+ pipeline.diffuseTexture = this._pendingTexture;
78
+ }
79
+ if (this._samplerSet) {
80
+ pipeline.diffuseTextureSampler = this._pendingSampler;
81
+ }
82
+ this._pipeline = pipeline;
83
+ return pipeline;
84
+ }
85
+
86
+ /**
87
+ * The camera. Setting it binds the camera's projection view buffer to the pipeline
88
+ * (the material's own placeholder buffer is disposed). Setting undefined keeps the last bound buffer.
89
+ */
90
+ public get camera(): ICamera | undefined {
91
+ return this._camera;
92
+ }
93
+
94
+ /** @inheritDoc */
95
+ public set camera(camera: ICamera | undefined) {
96
+ if (camera === this._camera) {
97
+ return;
98
+ }
99
+ this._camera = camera;
100
+ if (!camera) {
101
+ return;
102
+ }
103
+ if (this._ownsProjectionViewBuffer) {
104
+ this._projectionViewBuffer.dispose();
105
+ this._ownsProjectionViewBuffer = false;
106
+ }
107
+ this._projectionViewBuffer = camera.projectionViewBuffer;
108
+ if (this._pipeline) {
109
+ this._pipeline.projectionViewBuffer = this._projectionViewBuffer;
110
+ }
62
111
  }
63
112
 
64
113
  /**
@@ -70,34 +119,60 @@ export class UnlitMaterial {
70
119
  * The texture to inspect.
71
120
  */
72
121
  public get diffuseTexture(): ITexture2D {
73
- return this._pipeline.diffuseTexture;
122
+ return this._pipeline?.diffuseTexture ?? this._pendingTexture!;
74
123
  }
75
124
 
76
125
  /**
77
126
  * The texture to inspect.
78
127
  */
79
128
  public set diffuseTexture(value: ITexture2D) {
80
- this._pipeline.diffuseTexture = value;
129
+ this._pendingTexture = value;
130
+ if (this._pipeline) {
131
+ this._pipeline.diffuseTexture = value;
132
+ }
81
133
  }
82
134
 
83
135
  /**
84
136
  * The texture sampler.
85
137
  */
86
138
  public get diffuseTextureSampler(): ISampler | undefined {
87
- return this._pipeline.diffuseTextureSampler;
139
+ return this._pipeline ? this._pipeline.diffuseTextureSampler : this._pendingSampler;
88
140
  }
89
141
 
90
142
  /**
91
143
  * The texture sampler.
92
144
  */
93
145
  public set diffuseTextureSampler(value: ISampler | undefined) {
94
- this._pipeline.diffuseTextureSampler = value;
146
+ this._pendingSampler = value;
147
+ this._samplerSet = true;
148
+ if (this._pipeline) {
149
+ this._pipeline.diffuseTextureSampler = value;
150
+ }
95
151
  }
96
152
 
97
153
  /**
98
- * The model matrix.
154
+ * The model buffer (std140 `mat4`). Owned by the mesh, which assigns it before drawing; never disposed by this material.
155
+ * Undefined until assigned: rendering without one throws.
99
156
  */
100
- public modelMatrix: mat4 = mat4.create();
157
+ public get modelBuffer(): IUniformBuffer | undefined {
158
+ return this._modelBuffer;
159
+ }
160
+
161
+ /** Binds the model buffer to the pipeline. */
162
+ public set modelBuffer(value: IUniformBuffer | undefined) {
163
+ if (value === this._modelBuffer) {
164
+ return;
165
+ }
166
+ this._modelBuffer = value;
167
+ if (!value) {
168
+ return;
169
+ }
170
+ if (this._pipeline) {
171
+ this._pipeline.modelBuffer = value;
172
+ } else {
173
+ this._createPipeline(value);
174
+ }
175
+ }
101
176
 
102
177
  /**
103
178
  * The geometry format.
@@ -114,30 +189,28 @@ export class UnlitMaterial {
114
189
  this._materialData[3] = this._color.a;
115
190
  this._materialBuffer.update(this._materialData);
116
191
  }
117
-
118
- if (!mat4.equals(this._previousModelMatrix, this.modelMatrix)) {
119
- mat4.copy(this._previousModelMatrix, this.modelMatrix);
120
- this._modelBuffer.update(this._previousModelMatrix);
121
- }
122
192
  }
123
193
 
124
194
  /** @inheritDoc */
125
- public renderMesh(mesh: IMesh): void {
126
- this.render(mesh.vertexBuffer!, mesh.indexBuffer!);
195
+ public renderMesh(mesh: IRenderableMesh): void {
196
+ this.render(mesh.vertexBuffer!, mesh.indexBuffer!, mesh.indexCount ?? -1, mesh.indexStart ?? 0);
127
197
  }
128
198
 
129
199
  /** @inheritDoc */
130
- public render(vertexBuffer: IVertexBuffer, indexBuffer: IIndexBuffer): void {
131
- this._pipeline.render(vertexBuffer, indexBuffer);
200
+ public render(vertexBuffer: IVertexBuffer, indexBuffer: IIndexBuffer, indicesCount?: number, indicesOffset?: number): void {
201
+ if (!this._modelBuffer) {
202
+ throw new Error("UnlitMaterial: no modelBuffer. Render it through a mesh (the mesh assigns its model buffer) or set material.modelBuffer.");
203
+ }
204
+ (this._pipeline ?? this._createPipeline(this._modelBuffer)).render(vertexBuffer, indexBuffer, indicesCount, indicesOffset);
132
205
  }
133
206
 
134
207
  /** @inheritDoc */
135
208
  public dispose(): void {
136
- this._pipeline.dispose();
209
+ this._pipeline?.dispose();
210
+ this._pipeline = undefined;
137
211
  if (this._ownsProjectionViewBuffer) {
138
212
  this._projectionViewBuffer.dispose();
139
213
  }
140
- this._modelBuffer.dispose();
141
214
  this._materialBuffer.dispose();
142
215
  }
143
216
  }
@@ -2,4 +2,8 @@ export * from "./IMaterial.ts"
2
2
  export * from "./IMaterialFactory.ts"
3
3
  export * from "./InspectTextureMipsMaterial.ts"
4
4
  export * from "./MaterialFactory.ts"
5
- export * from "./UnlitMaterial.ts"
5
+ export * from "./SpriteMaterial.ts"
6
+ export * from "./UnlitMaterial.ts"
7
+ export * from "./ForwardBlinnPhongMaterial.ts"
8
+ export * from "./ICameraMaterial.ts"
9
+ export * from "./ILightsMaterial.ts"
@@ -1,20 +1,54 @@
1
1
  import type { IVertexBuffer } from "../rendering/buffers/IVertexBuffer.ts";
2
2
  import type { IDisposable } from "../core/IDisposable.ts";
3
3
  import type { IIndexBuffer } from "../rendering/buffers/IIndexBuffer.ts";
4
+ import type { IGeometry } from "../geometry/IGeometry.ts";
5
+ import type { GeometryFormat } from "../geometry/GeometryFormat.ts";
6
+ import type { State } from "../data/State.ts";
4
7
 
5
8
  /**
6
- * The mesh interface.
9
+ * A mesh: geometry and the vertex and index buffers created from it.
10
+ * It has no material and no transform; see {@link IRenderableMesh} for a mesh that can be drawn.
11
+ * @public
7
12
  */
8
13
  export interface IMesh extends IDisposable {
9
14
 
10
- /**
11
- * The positions buffer.
12
- */
15
+ /** The state of the mesh. */
16
+ readonly state: State;
17
+
18
+ /** The positions, when set through `setMesh`. */
19
+ readonly positions?: number[];
20
+
21
+ /** The colors, when set through `setMesh`. */
22
+ readonly colors?: number[];
23
+
24
+ /** The texture coordinates, when set through `setMesh`. */
25
+ readonly textureCoords?: number[];
26
+
27
+ /** The normals, when set through `setMesh`. */
28
+ readonly normals?: number[];
29
+
30
+ /** The indices, when set through `setMesh`. */
31
+ readonly indices?: number[];
32
+
33
+ /** The geometry the buffers were created from with `setGeometry`, if any. */
34
+ readonly geometry?: IGeometry;
35
+
36
+ /** The vertex buffer, if created. */
13
37
  readonly vertexBuffer?: IVertexBuffer;
14
38
 
39
+ /** The index buffer, if created. */
40
+ readonly indexBuffer?: IIndexBuffer;
41
+
42
+ /** Creates the buffers from the current data. */
43
+ initialize(): void;
44
+
15
45
  /**
16
- * The indices buffer.
46
+ * Creates the vertex and index buffers from a geometry.
47
+ * @param geometry The geometry.
48
+ * @param geometryFormat The vertex layout.
17
49
  */
18
- readonly indexBuffer?: IIndexBuffer;
50
+ setGeometry(geometry: IGeometry, geometryFormat?: GeometryFormat): void;
19
51
 
52
+ /** Re-creates (or updates) the buffers from the current data. */
53
+ applyChanges(): void;
20
54
  }
@@ -1,8 +1,20 @@
1
+ import type { GeometryFormat } from "../geometry/GeometryFormat.ts";
1
2
  import type { IGeometry } from "../geometry/IGeometry.ts";
2
- import {GeometryFormat} from "../geometry/GeometryFormat.ts";
3
3
  import {QuadMesh} from "./QuadMesh.ts";
4
4
  import {vec2} from "gl-matrix";
5
5
  import type { IMesh } from "./IMesh.ts";
6
+ import type { IMaterial } from "../material/IMaterial.ts";
7
+ import type { IRenderableMesh } from "./IRenderableMesh.ts";
8
+
9
+ /** Describes one submesh: a material and the index range it draws. */
10
+ export interface SubMeshDescriptor {
11
+ /** The material. */
12
+ readonly material: IMaterial;
13
+ /** The first index of the range. */
14
+ readonly indexStart: number;
15
+ /** The number of indices in the range. */
16
+ readonly indexCount: number;
17
+ }
6
18
 
7
19
  /**
8
20
  * The mesh factory.
@@ -10,12 +22,29 @@ import type { IMesh } from "./IMesh.ts";
10
22
  export interface IMeshFactory {
11
23
 
12
24
  /**
13
- * Creates a mesh.
25
+ * Creates a plain mesh (buffers only, no material or transform) from a geometry.
26
+ * @param geometry - The geometry.
27
+ * @param geometryFormat - The vertex layout.
28
+ * @returns The mesh.
29
+ */
30
+ createMesh(geometry: IGeometry, geometryFormat: GeometryFormat): IMesh;
31
+
32
+ /**
33
+ * Creates a renderable mesh with one material. Add it to a scene with `scene.add(mesh)`.
34
+ * @param geometry - The geometry.
35
+ * @param material - The material.
36
+ * @returns The mesh.
37
+ */
38
+ create(geometry: IGeometry, material: IMaterial): IRenderableMesh;
39
+
40
+ /**
41
+ * Creates a mesh made of submeshes that share one vertex and one index buffer.
42
+ * The root mesh has no material; `mesh.render()` draws its submeshes. Add the root to a scene with `scene.add(mesh)`.
14
43
  * @param geometry - The geometry.
15
- * @param geometryFormat - The geometry format.
44
+ * @param subMeshes - One entry per submesh. All materials must use the same geometry format.
16
45
  * @returns The mesh.
17
46
  */
18
- create(geometry: IGeometry, geometryFormat: GeometryFormat): IMesh;
47
+ createWithSubMeshes(geometry: IGeometry, subMeshes: SubMeshDescriptor[]): IRenderableMesh;
19
48
 
20
49
  /**
21
50
  * Creates the quad mesh.
@@ -0,0 +1,58 @@
1
+ import type { mat4, vec3 } from "gl-matrix";
2
+ import type { IMesh } from "./IMesh.ts";
3
+ import type { IMaterial } from "../material/IMaterial.ts";
4
+ import type { IUniformBuffer } from "../rendering/buffers/IUniformBuffer.ts";
5
+
6
+ /**
7
+ * A mesh that can be drawn: a mesh plus an optional material, an index range and sub meshes.
8
+ *
9
+ * - A root mesh owns the vertex and index buffers. Sub meshes share them and only store their index range.
10
+ * - Rendering: a mesh with a material draws its range, then its sub meshes draw theirs.
11
+ * A root without a material only draws its sub meshes.
12
+ * - The transform (position, rotation, scale) and the model buffer live on the root and are shared by all sub meshes,
13
+ * so a mesh uploads its model matrix once per change, whatever the number of materials.
14
+ * - Disposing the root disposes the sub meshes and the buffers once. Materials are not disposed by the mesh
15
+ * (a `SceneMesh` does that).
16
+ * @public
17
+ */
18
+ export interface IRenderableMesh extends IMesh {
19
+
20
+ /** The material, if any. A root mesh made only of sub meshes has none. */
21
+ material?: IMaterial;
22
+
23
+ /** The parent for a sub mesh; undefined for a root mesh. */
24
+ readonly parent?: IRenderableMesh;
25
+
26
+ /** The sub meshes. */
27
+ readonly subMeshes: readonly IRenderableMesh[];
28
+
29
+ /** First index of the range to draw. Defaults to 0. */
30
+ readonly indexStart: number;
31
+
32
+ /** Number of indices to draw; -1 (the default) draws all indices. */
33
+ readonly indexCount: number;
34
+
35
+ /** World position. Defaults to the origin. In-place edits are detected. A sub mesh uses the root's. */
36
+ position: vec3;
37
+
38
+ /**
39
+ * Euler rotation in radians, applied in Y, X, Z order (yaw, pitch, roll): `R = Ry * Rx * Rz`.
40
+ * Defaults to (0, 0, 0). In-place edits are detected. A sub mesh uses the root's.
41
+ */
42
+ rotation: vec3;
43
+
44
+ /** Scale. Defaults to (1, 1, 1). In-place edits are detected. A sub mesh uses the root's. */
45
+ scale: vec3;
46
+
47
+ /** The model matrix `T * R * S`, recomputed only when position, rotation or scale changed. */
48
+ readonly modelMatrix: mat4;
49
+
50
+ /**
51
+ * The model buffer (std140 `mat4`) holding {@link modelMatrix}. Owned by the root mesh (sub meshes share it),
52
+ * uploaded when the transform changed and assigned to the material(s) before drawing. Created on first use.
53
+ */
54
+ readonly modelBuffer: IUniformBuffer;
55
+
56
+ /** Draws the mesh's range with its material (if any), then the sub meshes. */
57
+ render(): void;
58
+ }