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
@@ -2,22 +2,23 @@
2
2
  * The mesh is a building class for a world shape.
3
3
  */
4
4
  import {State} from "../data/State.ts";
5
- import type { IVertexBuffer } from "../rendering/buffers/IVertexBuffer.ts";
6
- import type { IIndexBuffer } from "../rendering/buffers/IIndexBuffer.ts";
7
- import type { IFramework } from "../IFramework.ts";
8
- import type { IMesh } from "./IMesh.ts";
5
+ import type {IVertexBuffer} from "../rendering/buffers/IVertexBuffer.ts";
6
+ import type {IIndexBuffer} from "../rendering/buffers/IIndexBuffer.ts";
7
+ import type {IFramework} from "../IFramework.ts";
8
+ import type {IMesh} from "./IMesh.ts";
9
9
  import {BufferUsage} from "../rendering/buffers/BufferUsage.ts";
10
- import type { IGeometry } from "../geometry/IGeometry.ts";
11
- import {GeometryFormat} from "../geometry/GeometryFormat.ts";
10
+ import type {IGeometry} from "../geometry/IGeometry.ts";
12
11
  import {MeshParameters} from "./MeshParameters.ts";
13
12
  import {GeometryUtilities} from "../utilities/GeometryUtilities.ts";
13
+ import type {GeometryFormat} from "../geometry/GeometryFormat.ts";
14
14
 
15
15
  /**
16
- * The mesh.
16
+ * The base mesh: geometry and the vertex and index buffers created from it (C# `BaseMesh`).
17
+ * No material and no transform; {@link RenderableMesh} adds those.
18
+ * @public
17
19
  */
18
20
  export class Mesh implements IMesh {
19
21
 
20
- protected readonly _framework: IFramework;
21
22
  protected _bufferUsage = BufferUsage.VERTEX;
22
23
  protected _state = State.CREATED;
23
24
  protected _vertexData?: number[];
@@ -28,13 +29,23 @@ export class Mesh implements IMesh {
28
29
  protected _normals?: number[];
29
30
  protected _vertexBuffer?: IVertexBuffer;
30
31
  protected _indexBuffer?: IIndexBuffer;
32
+ protected _geometry?: IGeometry;
31
33
 
32
34
  /**
33
35
  * The constructor.
34
- * @param framework The framework.
36
+ * @param _framework The framework.
35
37
  */
36
- public constructor(framework: IFramework) {
37
- this._framework = framework;
38
+ public constructor(protected readonly _framework: IFramework) {
39
+ }
40
+
41
+ /** The geometry the buffers were created from with {@link setGeometry}, if any. */
42
+ public get geometry(): IGeometry | undefined {
43
+ return this._geometry;
44
+ }
45
+
46
+ /** The geometry format used when {@link setGeometry} is called without one. Undefined for a plain mesh. */
47
+ protected get _defaultGeometryFormat(): GeometryFormat | undefined {
48
+ return undefined;
38
49
  }
39
50
 
40
51
  /**
@@ -90,7 +101,7 @@ export class Mesh implements IMesh {
90
101
  * The index buffer.
91
102
  */
92
103
  public get indexBuffer(): IIndexBuffer | undefined {
93
- return this._indexBuffer ;
104
+ return this._indexBuffer;
94
105
  }
95
106
 
96
107
  /**
@@ -100,25 +111,24 @@ export class Mesh implements IMesh {
100
111
  this.applyChanges();
101
112
  }
102
113
 
103
- private _fillColors(index: {vertexDataIndex: number, colorIndex: number}, colors: number[]): void {
114
+ private _fillColors(index: { vertexDataIndex: number, colorIndex: number }, colors: number[]): void {
104
115
 
105
- if(!this._vertexData) {
116
+ if (!this._vertexData) {
106
117
  throw new Error("Vertex data is not initialized");
107
118
  }
108
119
 
109
120
  let v = index.vertexDataIndex;
110
121
  let c = index.colorIndex;
111
122
 
112
- if(colors.length > index.colorIndex) {
123
+ if (colors.length > index.colorIndex) {
113
124
  this._vertexData[v++] = colors[c++];
114
125
  this._vertexData[v++] = colors[c++];
115
126
  this._vertexData[v++] = colors[c++];
116
127
  this._vertexData[v++] = colors[c++];
117
128
  index.vertexDataIndex = v;
118
- }
119
- else {
129
+ } else {
120
130
  // Just prefill with white color
121
- this._vertexData[v++] =1;
131
+ this._vertexData[v++] = 1;
122
132
  this._vertexData[v++] = 1;
123
133
  this._vertexData[v++] = 1;
124
134
  this._vertexData[v++] = 1;
@@ -131,10 +141,8 @@ export class Mesh implements IMesh {
131
141
  /**
132
142
  * Apply changes to the mesh.
133
143
  */
134
- public applyChanges()
135
- {
136
- if (!this._positions ||this._positions.length == 0)
137
- {
144
+ public applyChanges() {
145
+ if (!this._positions || this._positions.length == 0) {
138
146
  //_framework.Logger.LogWarning("Cannot create buffers for a Mesh as Mesh has no positions.");
139
147
  throw new Error(`Cannot create buffers for a Mesh as Mesh has no positions`);
140
148
  }
@@ -152,31 +160,27 @@ export class Mesh implements IMesh {
152
160
  let normalIndex = 0;
153
161
  let uvsIndex = 0;
154
162
 
155
- for (let i = 0; i < vertexCount; i++)
156
- {
163
+ for (let i = 0; i < vertexCount; i++) {
157
164
  // Positions.
158
165
  this._vertexData[vertexIndex++] = this._positions[positionsIndex++];
159
166
  this._vertexData[vertexIndex++] = this._positions[positionsIndex++];
160
167
  this._vertexData[vertexIndex++] = this._positions[positionsIndex++];
161
168
 
162
169
  // Colors.
163
- if (this._colors)
164
- {
170
+ if (this._colors) {
165
171
  const index = {vertexDataIndex: vertexIndex, colorIndex: colorIndex};
166
172
  this._fillColors(index, this._colors);
167
173
  vertexIndex = index.vertexDataIndex;
168
174
  colorIndex = index.colorIndex;
169
175
  }
170
176
 
171
- if (this._textureCoords)
172
- {
177
+ if (this._textureCoords) {
173
178
  // Uvs.
174
179
  this._vertexData[vertexIndex++] = this._textureCoords[uvsIndex++];
175
180
  this._vertexData[vertexIndex++] = this._textureCoords[uvsIndex++];
176
181
  }
177
182
 
178
- if (this._normals)
179
- {
183
+ if (this._normals) {
180
184
  this._vertexData[vertexIndex++] = this._normals[normalIndex++];
181
185
  this._vertexData[vertexIndex++] = this._normals[normalIndex++];
182
186
  this._vertexData[vertexIndex++] = this._normals[normalIndex++];
@@ -186,13 +190,12 @@ export class Mesh implements IMesh {
186
190
  // Vertices
187
191
  this._vertexBuffer?.dispose();
188
192
  this._vertexBuffer = this._framework.bufferFactory.createVertexBuffer(
189
- this._vertexData, stride, this._bufferUsage);
193
+ this._vertexData, stride, this._bufferUsage);
190
194
 
191
195
  // Indices
192
196
  this._indexBuffer?.dispose();
193
- if (this._indices && this._indices.length > 0)
194
- {
195
- this._indexBuffer= this._framework.bufferFactory.createIndexBuffer(
197
+ if (this._indices && this._indices.length > 0) {
198
+ this._indexBuffer = this._framework.bufferFactory.createIndexBuffer(
196
199
  this._indices);
197
200
  }
198
201
  }
@@ -201,19 +204,23 @@ export class Mesh implements IMesh {
201
204
  * Sets the mesh from a geometry.
202
205
  *
203
206
  * This will create vertex buffer and index buffer from geometry.
204
- * Positions, Colors, TextureCoordinates and Normals will be ignored.
205
207
  * @param geometry - The geometry.
206
- * @param format - The format for geometry.
208
+ * @param geometryFormat - The vertex layout. A `RenderableMesh` defaults to its material's geometry format.
207
209
  */
208
- public setGeometry(geometry: IGeometry, format: GeometryFormat): void {
209
- if (geometry.vertexCount == 0)
210
- {
210
+ public setGeometry(geometry: IGeometry, geometryFormat?: GeometryFormat): void {
211
+
212
+ const format = geometryFormat ?? this._defaultGeometryFormat;
213
+ if (format === undefined) {
214
+ throw new Error("Cannot create buffers for a Mesh without a geometry format (pass one, or give a RenderableMesh a material).");
215
+ }
216
+ if (geometry.vertexCount == 0) {
211
217
  const message =
212
- "Cannot create buffers for a Mesh as Mesh has no positions. Check that geometry.vertexCount is set.";
218
+ "Cannot create buffers for a Mesh as Mesh has no positions. Check that geometry.vertexCount is set.";
213
219
  //_framework.Logger.LogError(message);
214
220
  throw new Error(message);
215
221
  }
216
222
 
223
+ this._geometry = geometry;
217
224
  const interleavedData = geometry.toInterleaved(format);
218
225
  const stride = GeometryUtilities.stride(format);
219
226
 
@@ -226,8 +233,7 @@ export class Mesh implements IMesh {
226
233
 
227
234
  // Indices
228
235
  this._indexBuffer?.dispose();
229
- if (geometry.indices)
230
- {
236
+ if (geometry.indices) {
231
237
  this._indexBuffer = this._framework.bufferFactory.createIndexBuffer(geometry.indices);
232
238
  }
233
239
  }
@@ -245,12 +251,13 @@ export class Mesh implements IMesh {
245
251
  }
246
252
 
247
253
  /**
248
- * Dispose of the mesh.
254
+ * Disposes the vertex and index buffers.
249
255
  */
250
256
  public dispose(): void {
251
257
  this._vertexBuffer?.dispose();
252
258
  this._vertexBuffer = undefined;
253
259
  this._indexBuffer?.dispose();
254
260
  this._indexBuffer = undefined;
261
+ this._state = State.DISPOSED;
255
262
  }
256
263
  }
@@ -1,11 +1,15 @@
1
+ import {RenderableMesh} from "./RenderableMesh.ts";
2
+ import type { IRenderableMesh } from "./IRenderableMesh.ts";
3
+ import type { GeometryFormat } from "../geometry/GeometryFormat.ts";
1
4
  import type { IMeshFactory } from "./IMeshFactory.ts";
2
5
  import type { IGeometry } from "../geometry/IGeometry.ts";
3
- import {GeometryFormat} from "../geometry/GeometryFormat.ts";
4
6
  import type { IMesh } from "./IMesh.ts";
5
7
  import {QuadMesh} from "./QuadMesh.ts";
6
8
  import type { IFramework } from "../IFramework.ts";
7
9
  import {Mesh} from "./Mesh.ts";
8
10
  import {vec2} from "gl-matrix";
11
+ import type { IMaterial } from "../material/IMaterial.ts";
12
+ import type { SubMeshDescriptor } from "./IMeshFactory.ts";
9
13
 
10
14
  /**
11
15
  * The implementation of the mesh factory interface.
@@ -20,17 +24,46 @@ export class MeshFactory implements IMeshFactory {
20
24
  }
21
25
 
22
26
  /** @inheritDoc */
23
- public create(geometry: IGeometry, geometryFormat: GeometryFormat): IMesh {
27
+ public createMesh(geometry: IGeometry, geometryFormat: GeometryFormat): IMesh {
24
28
  const mesh = new Mesh(this._framework);
25
29
  mesh.setGeometry(geometry, geometryFormat);
26
30
  return mesh;
27
31
  }
28
32
 
29
33
  /** @inheritDoc */
30
- public createQuadMesh(isUpdatable: boolean, scale?: vec2): QuadMesh {
31
- const quadMesh = new QuadMesh(this._framework, isUpdatable, scale);
34
+ public create(geometry: IGeometry, material: IMaterial): IRenderableMesh {
35
+ const mesh = new RenderableMesh(this._framework, material);
36
+ mesh.setGeometry(geometry);
37
+ return mesh;
38
+ }
39
+
40
+ /** @inheritDoc */
41
+ public createWithSubMeshes(geometry: IGeometry, subMeshes: SubMeshDescriptor[]): IRenderableMesh {
42
+ if (subMeshes.length == 0) {
43
+ throw new Error("createWithSubMeshes needs at least one submesh.");
44
+ }
45
+ const format = subMeshes[0].material.geometryFormat;
46
+ if (subMeshes.some(s => s.material.geometryFormat != format)) {
47
+ throw new Error("All submesh materials must use the same geometry format, as they share one vertex buffer.");
48
+ }
49
+
50
+ const mesh = new RenderableMesh(this._framework);
51
+ mesh.setGeometry(geometry, format);
52
+ for (const subMesh of subMeshes) {
53
+ mesh.addSubMesh(subMesh.material, subMesh.indexStart, subMesh.indexCount);
54
+ }
55
+ return mesh;
56
+ }
57
+
58
+ /** @inheritDoc */
59
+ public createQuadMesh(_isUpdatable: boolean, _scale?: vec2): QuadMesh {
60
+
61
+ throw new Error("Meshes not implemented.");
62
+ /* const quadMesh = new QuadMesh(this._framework, isUpdatable, scale);
32
63
  quadMesh.initialize();
33
64
  return quadMesh;
65
+
66
+ */
34
67
  }
35
68
 
36
69
  }
@@ -1,13 +1,14 @@
1
- import {Mesh} from "./Mesh.ts";
1
+ import {RenderableMesh} from "./RenderableMesh.ts";
2
2
  import {Rect} from "../data/Rect.ts";
3
3
  import type { IFramework } from "../IFramework.ts";
4
4
  import {vec2} from "gl-matrix";
5
5
  import {BufferUsage} from "../rendering/buffers/BufferUsage.ts";
6
+ import type {IMaterial} from "../material/IMaterial.ts";
6
7
 
7
8
  /**
8
9
  * The mesh of a quad.
9
10
  */
10
- export class QuadMesh extends Mesh {
11
+ export class QuadMesh extends RenderableMesh {
11
12
 
12
13
  private readonly ELEMENTS_IN_VERTEX = 9;
13
14
  private readonly TEX_COORD_POS_S = 7;
@@ -16,11 +17,12 @@ export class QuadMesh extends Mesh {
16
17
  /**
17
18
  * The constructor.
18
19
  * @param framework The framework.
20
+ * @param material The material.
19
21
  * @param _isUpdatable Makes mesh updatable.
20
22
  * @param scale The scale factor for geometry. If not set, it is set to (1,1).
21
23
  */
22
- public constructor(framework: IFramework, private _isUpdatable: boolean, scale?: vec2) {
23
- super(framework);
24
+ public constructor(framework: IFramework, material: IMaterial, private _isUpdatable: boolean, scale?: vec2) {
25
+ super(framework, material);
24
26
  if(_isUpdatable) {
25
27
  this._bufferUsage = BufferUsage.VERTEX | BufferUsage.COPY_DST;
26
28
  }
@@ -0,0 +1,207 @@
1
+ import {mat4, quat, vec3} from "gl-matrix";
2
+ import {Mesh} from "./Mesh.ts";
3
+ import type {IRenderableMesh} from "./IRenderableMesh.ts";
4
+ import type {IFramework} from "../IFramework.ts";
5
+ import type {IMaterial} from "../material/IMaterial.ts";
6
+ import type {IUniformBuffer} from "../rendering/buffers/IUniformBuffer.ts";
7
+ import type {IVertexBuffer} from "../rendering/buffers/IVertexBuffer.ts";
8
+ import type {IIndexBuffer} from "../rendering/buffers/IIndexBuffer.ts";
9
+ import type {GeometryFormat} from "../geometry/GeometryFormat.ts";
10
+ import {BufferUsage} from "../rendering/buffers/BufferUsage.ts";
11
+
12
+ /**
13
+ * A mesh that can be drawn (C# `RenderableMesh`). See {@link IRenderableMesh}.
14
+ *
15
+ * - Root: `new RenderableMesh(framework, material?)` owns the vertex and index buffers, the transform and the model buffer.
16
+ * - Sub mesh: `new RenderableMesh(framework, material, parent, indexStart, indexCount)` (or `parent.addSubMesh(...)`)
17
+ * shares the parent's buffers, transform and model buffer, and only stores its index range.
18
+ * @public
19
+ */
20
+ export class RenderableMesh extends Mesh implements IRenderableMesh {
21
+
22
+ private readonly _subMeshes: RenderableMesh[] = [];
23
+ private readonly _parent?: RenderableMesh;
24
+
25
+ // Transform; only used on the root.
26
+ private _position: vec3 = vec3.create();
27
+ private _rotation: vec3 = vec3.create();
28
+ private _scale: vec3 = vec3.fromValues(1, 1, 1);
29
+ private readonly _modelMatrix = mat4.create();
30
+ private readonly _rotationQuat = quat.create();
31
+ // Cached copies to detect in-place edits; NaN forces the first computation.
32
+ private readonly _lastPosition = vec3.fromValues(NaN, NaN, NaN);
33
+ private readonly _lastRotation = vec3.create();
34
+ private readonly _lastScale = vec3.create();
35
+ private _modelBuffer?: IUniformBuffer;
36
+ /** The matrix last uploaded to the model buffer. */
37
+ private readonly _uploadedMatrix = mat4.create();
38
+
39
+ /** @inheritDoc */
40
+ public material?: IMaterial;
41
+
42
+ /** @inheritDoc */
43
+ public readonly indexStart: number;
44
+
45
+ /** @inheritDoc */
46
+ public readonly indexCount: number;
47
+
48
+ /**
49
+ * The constructor.
50
+ * @param framework The framework.
51
+ * @param material The material. Optional for a root mesh drawn only through its sub meshes.
52
+ * @param parent The parent, for a sub mesh. A sub mesh shares the parent's buffers and transform and is added to `parent.subMeshes`.
53
+ * @param indexStart The first index of the range. Defaults to 0.
54
+ * @param indexCount The number of indices of the range. -1 (default) draws all indices.
55
+ */
56
+ public constructor(framework: IFramework, material?: IMaterial, parent?: RenderableMesh, indexStart = 0, indexCount = -1) {
57
+ super(framework);
58
+ this.material = material;
59
+ this._parent = parent;
60
+ this.indexStart = indexStart;
61
+ this.indexCount = indexCount;
62
+ parent?._subMeshes.push(this);
63
+ }
64
+
65
+ /** The root mesh: the one owning the buffers and the transform. */
66
+ private get _root(): RenderableMesh {
67
+ return this._parent ? this._parent._root : this;
68
+ }
69
+
70
+ /** @inheritDoc */
71
+ public get parent(): RenderableMesh | undefined {
72
+ return this._parent;
73
+ }
74
+
75
+ /** @inheritDoc */
76
+ public get subMeshes(): readonly RenderableMesh[] {
77
+ return this._subMeshes;
78
+ }
79
+
80
+ /**
81
+ * Adds a sub mesh that draws a range of this mesh's index buffer with its own material.
82
+ * @param material The material of the sub mesh.
83
+ * @param indexStart The first index of the range.
84
+ * @param indexCount The number of indices in the range; -1 draws all.
85
+ * @returns The sub mesh.
86
+ */
87
+ public addSubMesh(material: IMaterial | undefined, indexStart: number, indexCount: number): RenderableMesh {
88
+ return new RenderableMesh(this._framework, material, this, indexStart, indexCount);
89
+ }
90
+
91
+ /** The parent's vertex buffer for a sub mesh, else its own. */
92
+ public override get vertexBuffer(): IVertexBuffer | undefined {
93
+ return this._parent ? this._parent.vertexBuffer : this._vertexBuffer;
94
+ }
95
+
96
+ /** The parent's index buffer for a sub mesh, else its own. */
97
+ public override get indexBuffer(): IIndexBuffer | undefined {
98
+ return this._parent ? this._parent.indexBuffer : this._indexBuffer;
99
+ }
100
+
101
+ /** The material's geometry format. */
102
+ protected override get _defaultGeometryFormat(): GeometryFormat | undefined {
103
+ return this.material?.geometryFormat;
104
+ }
105
+
106
+ /** @inheritDoc */
107
+ public get position(): vec3 { return this._root._position; }
108
+ public set position(value: vec3) { this._root._position = value; }
109
+
110
+ /** @inheritDoc */
111
+ public get rotation(): vec3 { return this._root._rotation; }
112
+ public set rotation(value: vec3) { this._root._rotation = value; }
113
+
114
+ /** @inheritDoc */
115
+ public get scale(): vec3 { return this._root._scale; }
116
+ public set scale(value: vec3) { this._root._scale = value; }
117
+
118
+ /** @inheritDoc */
119
+ public get modelMatrix(): mat4 {
120
+ const root = this._root;
121
+ if (root !== this) {
122
+ return root.modelMatrix;
123
+ }
124
+ if (!vec3.exactEquals(this._lastPosition, this._position)
125
+ || !vec3.exactEquals(this._lastRotation, this._rotation)
126
+ || !vec3.exactEquals(this._lastScale, this._scale)) {
127
+ vec3.copy(this._lastPosition, this._position);
128
+ vec3.copy(this._lastRotation, this._rotation);
129
+ vec3.copy(this._lastScale, this._scale);
130
+ const q = quat.identity(this._rotationQuat);
131
+ quat.rotateY(q, q, this._rotation[1]);
132
+ quat.rotateX(q, q, this._rotation[0]);
133
+ quat.rotateZ(q, q, this._rotation[2]);
134
+ mat4.fromRotationTranslationScale(this._modelMatrix, q, this._position, this._scale);
135
+ }
136
+ return this._modelMatrix;
137
+ }
138
+
139
+ /** @inheritDoc Created on first access and disposed with the root mesh. */
140
+ public get modelBuffer(): IUniformBuffer {
141
+ const root = this._root;
142
+ if (root !== this) {
143
+ return root.modelBuffer;
144
+ }
145
+ if (!this._modelBuffer) {
146
+ mat4.copy(this._uploadedMatrix, this.modelMatrix);
147
+ this._modelBuffer = this._framework.bufferFactory.createUniformBuffer(
148
+ this._uploadedMatrix, BufferUsage.UNIFORM | BufferUsage.COPY_DST, "RenderableMesh.modelBuffer");
149
+ }
150
+ return this._modelBuffer;
151
+ }
152
+
153
+ /** Uploads the root's model matrix when the transform changed since the last upload. */
154
+ private _updateModelBuffer(): IUniformBuffer {
155
+ const root = this._root;
156
+ const buffer = root.modelBuffer;
157
+ const matrix = root.modelMatrix;
158
+ if (!mat4.exactEquals(root._uploadedMatrix, matrix)) {
159
+ mat4.copy(root._uploadedMatrix, matrix);
160
+ buffer.update(root._uploadedMatrix);
161
+ }
162
+ return buffer;
163
+ }
164
+
165
+ /**
166
+ * Assigns the model buffer to a material that uses one (has a `modelBuffer` property), only when it differs.
167
+ * Materials without one (e.g. sprites) are skipped and no buffer is created for them.
168
+ */
169
+ private _assignModelBuffer(material: IMaterial): void {
170
+ if (!("modelBuffer" in material)) {
171
+ return;
172
+ }
173
+ const buffer = this._updateModelBuffer();
174
+ if (material.modelBuffer !== buffer) {
175
+ material.modelBuffer = buffer;
176
+ }
177
+ }
178
+
179
+ /** @inheritDoc */
180
+ public render(): void {
181
+ if (this.material) {
182
+ this._assignModelBuffer(this.material);
183
+ this.material.beforeRender();
184
+ this.material.renderMesh(this);
185
+ }
186
+ for (const subMesh of this._subMeshes) {
187
+ subMesh.render();
188
+ }
189
+ }
190
+
191
+ /**
192
+ * Disposes the sub meshes, then (for a root) the vertex, index and model buffers, once.
193
+ * A sub mesh never disposes the shared buffers. Materials are not disposed.
194
+ */
195
+ public override dispose(): void {
196
+ for (const subMesh of this._subMeshes) {
197
+ subMesh.dispose();
198
+ }
199
+ this._subMeshes.length = 0;
200
+ if (this._parent) {
201
+ return;
202
+ }
203
+ super.dispose();
204
+ this._modelBuffer?.dispose();
205
+ this._modelBuffer = undefined;
206
+ }
207
+ }
@@ -1,6 +1,8 @@
1
1
  export * from "./IMeshFactory.ts";
2
- export * from "./IMesh.ts"
3
- export * from "./Mesh.ts"
2
+ export * from "./IMesh.ts";
3
+ export * from "./IRenderableMesh.ts";
4
+ export * from "./Mesh.ts";
5
+ export * from "./RenderableMesh.ts";
4
6
  export * from "./QuadMesh.ts";
5
- export * from "./MeshParameters.ts"
6
- export * from "./MeshFactory.ts";
7
+ export * from "./MeshParameters.ts";
8
+ export * from "./MeshFactory.ts";
@@ -3,30 +3,37 @@
3
3
  */
4
4
  export interface IGraphicsDeviceFeatures {
5
5
 
6
- /**
7
- * Supports S3TC / DXT (BC1–BC3) texture compression.
8
- */
9
- readonly supportsTextureCompressionS3TC: boolean;
6
+ /**
7
+ * Supports S3TC / DXT (BC1–BC3) texture compression.
8
+ */
9
+ readonly supportsTextureCompressionS3TC: boolean;
10
10
 
11
- /**
12
- * Supports full Block Compression (BC1–BC7) textures.
13
- Includes S3TC (BC1–BC3) plus BC4–BC7.
14
- */
15
- readonly supportsTextureCompressionBC: boolean;
11
+ /**
12
+ * Supports the sRGB variants of S3TC / DXT (BC1–BC3).
13
+ * In WebGL2 this needs WEBGL_compressed_texture_s3tc_srgb; in WebGPU it is part of texture-compression-bc.
14
+ */
15
+ readonly supportsTextureCompressionS3TCSrgb: boolean;
16
16
 
17
- /**
18
- * Supports ETC2 / EAC texture compression (OpenGL/ES and Vulkan standard).
19
- */
20
- readonly supportsTextureCompressionETC2: boolean;
17
+ /**
18
+ * Supports full Block Compression (BC1–BC7) textures.
19
+ Includes S3TC (BC1–BC3) plus BC4–BC7.
20
+ */
21
+ readonly supportsTextureCompressionBC: boolean;
21
22
 
22
- /**
23
- * Supports ASTC (Adaptive Scalable Texture Compression) — LDR and HDR profiles.
24
- */
25
- readonly supportsTextureCompressionASTC: boolean;
23
+ /**
24
+ * Supports ETC2 / EAC texture compression (OpenGL/ES and Vulkan standard).
25
+ */
26
+ readonly supportsTextureCompressionETC2: boolean;
26
27
 
27
- /**
28
- * Supports PVRTC (PowerVR Texture Compression) 1 and 2.
29
- */
30
- readonly supportsTextureCompressionPVRTC: boolean;
28
+ /**
29
+ * Supports ASTC (Adaptive Scalable Texture Compression) — LDR and HDR profiles.
30
+ */
31
+ readonly supportsTextureCompressionASTC: boolean;
32
+
33
+ /**
34
+ * Supports PVRTC (PowerVR Texture Compression) 1.
35
+ * PVRTC 2 is not supported by either WebGL2 or WebGPU context.
36
+ */
37
+ readonly supportsTextureCompressionPVRTC: boolean;
31
38
 
32
39
  }
@@ -3,10 +3,40 @@ import {TextureFormat} from "./texture/TextureFormat.ts";
3
3
  import {Color} from "../data/Color.ts";
4
4
  import {RenderingBackend} from "./RenderingBackend.ts";
5
5
  import {vec2} from "gl-matrix";
6
+ import type {PowerPreferenceType} from "./PowerPreference.ts";
7
+ import type {TextureSamplerFilteringPreset} from "../../core/rendering/enums.ts";
8
+ import type {TextureColorSpace} from "./enums.ts";
6
9
 
7
10
 
11
+ /**
12
+ * The configuration for the renderer. This is used to initialize the renderer.
13
+ * @internal
14
+ */
15
+ export interface IRendererConfiguration {
16
+
17
+ /**The size of the main frame buffer. */
18
+ backBufferSize: vec2;
19
+
20
+ /** Should back buffer use alpha. */
21
+ alpha: boolean;
22
+
23
+ /** The preference when it comes to selecting GPU device. Only makes sense to set on multi-GPU devices. */
24
+ powerPreference: PowerPreferenceType;
25
+
26
+ /**
27
+ * The preset for texture sampler filtering.
28
+ * This is used to configure the default texture sampler in the graphics device.
29
+ * The default texture sampler is used when a texture is sampled without a specific sampler being bound.
30
+ */
31
+ textureFiltering: TextureSamplerFilteringPreset;
32
+
33
+ /** The desired texture color space. */
34
+ textureColorSpace: TextureColorSpace;
35
+ }
36
+
8
37
  /**
9
38
  * The interface for a renderer.
39
+ * @public
10
40
  */
11
41
  export interface IRenderer {
12
42
 
@@ -16,7 +46,10 @@ export interface IRenderer {
16
46
  readonly graphicsDevice: IGraphicsDevice;
17
47
 
18
48
  /**
19
- * The surface preferred a texture format.
49
+ * The preferred texture format.
50
+ * This will encode texture which do not specify texture format to:
51
+ * - {@link TextureFormat.} // TODO: describe SRGB depending on TextureSurfaceFormat requested
52
+ * - {@link TextureFormat.} // TODO: describe RGBA depending on TextureSurfaceFormat requested
20
53
  */
21
54
  readonly preferredTextureFormat: TextureFormat;
22
55
 
@@ -17,4 +17,14 @@ export enum Culling {
17
17
  * The front faces will be culled. Only back faces will be rendered.
18
18
  */
19
19
  Front
20
+ }
21
+
22
+ /** TODO: */
23
+ export enum TextureColorSpace
24
+ {
25
+ /** TODO */
26
+ LINEAR = "LINEAR",
27
+
28
+ /** TODO */
29
+ SRGB = "S_RGBA",
20
30
  }