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
package/src/Framework.ts CHANGED
@@ -1,40 +1,42 @@
1
- import {container, type DependencyContainer} from "tsyringe";
1
+ import {WebGlAmbientLightFactory} from "./webgl/lights/WebGlAmbientLightFactory.ts";
2
2
  import {WindowManager} from "./api/window/WindowManager.ts";
3
- import {FrameworkConfiguration} from "./api/FrameworkConfiguration.ts";
4
- import {type IRendererConfiguration, RenderConfigurationSymbol} from "./api/rendering/renderer-interface.ts";
5
3
  import {GeometryBuilder} from "./api/geometry/GeometryBuilder.ts";
6
4
  import {ContentManager} from "./api/content/ContentManager.ts";
5
+ import {ObjLoader} from "./api/loaders/ObjLoader.ts";
7
6
  import {WebGlRenderer} from "./webgl/WebGlRenderer.ts";
8
7
  import {WebGlBuffersFactory} from "./webgl/buffers/WebGlBuffersFactory.ts";
9
8
  import {
10
- type ICameraFactory,
11
- type IContentManager,
12
- type IFramework, IFrameworkConfiguration,
13
- type IImageLoader,
14
- type IRenderer,
15
- type IRenderPipelineFactory,
16
- type IWindowManager
17
- } from "./api/index.ts";
18
- import {
9
+ type AmbientLightFactory,
19
10
  CameraFactory,
20
11
  CpuImageProcessor,
21
12
  GameTime,
22
13
  type IBufferFactory,
14
+ type ICameraFactory,
15
+ type IContentManager,
16
+ type IFramework,
17
+ IFrameworkConfiguration,
23
18
  type IGeometryBuilder,
24
19
  type IGraphicsDevice,
20
+ type IImageLoader,
25
21
  type IImageProcessor,
26
22
  type IInputManager,
27
23
  ImageLoader,
28
24
  type IMaterialFactory,
29
25
  type IMeshFactory,
26
+ type IRenderer,
27
+ type IRendererConfiguration,
28
+ type IRenderPipelineFactory,
30
29
  type ISpriteBatch,
31
30
  type ITextureFactory,
32
31
  type ITimeManager,
32
+ type IWindowManager,
33
33
  MaterialFactory,
34
34
  MeshFactory,
35
35
  RenderingBackend,
36
36
  TimeManager
37
37
  } from "./api/index.ts";
38
+ import {WebGlTexture2D} from "./webgl/texture/WebGlTexture2D.ts";
39
+ import type {IDisposable} from "./api/core/IDisposable.ts";
38
40
  import {WebGlShaderModuleLoader} from "./webgl/shader/WebGlShaderModuleLoader.ts";
39
41
  import {TextureSamplerFilteringPreset} from "./core/rendering/enums.ts";
40
42
  import {SpriteBatch} from "./api/sprites/SpriteBatch.ts";
@@ -45,7 +47,16 @@ import type {IKtx2Factory} from "ris-ktx2";
45
47
  import {Ktx2Factory} from "ris-ktx2";
46
48
  import {PowerPreferenceType} from "./api/rendering/PowerPreference.ts";
47
49
  import {vec2} from "gl-matrix";
48
-
50
+ import {ARenderer} from "./core/rendering/ARenderer.ts";
51
+ import {WebGpuRenderer} from "./webgpu/WebGpuRenderer.ts";
52
+ import {WebGpuTextureFactory} from "./webgpu/texture/WebGpuTextureFactory.ts";
53
+ import {WebGpuRenderPipelineFactory} from "./webgpu/render-pipelines/WebGpuRenderPipelineFactory.ts";
54
+ import {WebGpuShaderModuleLoader} from "./webgpu/shader/WebGpuShaderModuleLoader.ts";
55
+ import {WebGpuBuffersFactory} from "./webgpu/buffers/WebGpuBuffersFactory.ts";
56
+ import {WebGpuTexture2D} from "./webgpu/texture/WebGpuTexture2D.ts";
57
+ import {TextureColorSpace} from "./api/rendering/enums.ts";
58
+
59
+ /** The Ris framework */
49
60
  export class Framework implements IFramework {
50
61
 
51
62
  private readonly _onLoadContentListeners: (() => void)[] = [];
@@ -53,47 +64,63 @@ export class Framework implements IFramework {
53
64
  private readonly _onUpdateListeners: ((gameTime: GameTime) => void)[] = [];
54
65
  private readonly _onRenderListeners: (() => void)[] = [];
55
66
 
56
- private readonly _container: DependencyContainer;
57
- private readonly _textureFactory: ITextureFactory;
58
- private readonly _buffersFactory: IBufferFactory;
59
- private readonly _contentManager: IContentManager;
67
+ private _configuration: IFrameworkConfiguration;
68
+ private _textureFactory: ITextureFactory = null!;
69
+ private _buffersFactory: IBufferFactory = null!;
70
+ private _contentManager: IContentManager = null!;
71
+ private readonly _rendererConfiguration: IRendererConfiguration = null!;
72
+ private _renderer: IRenderer = null!;
60
73
  private readonly _geometryBuilder: IGeometryBuilder;
61
74
  private readonly _meshFactory: IMeshFactory;
75
+ private _disposed = false;
62
76
 
63
77
  /**
64
78
  * The constructor for the Framework class.
65
- * @param options The optional framework configuration. When omitted, a default `FrameworkConfiguration` is used.
79
+ * @param configuration The optional framework configuration. When omitted, a default `FrameworkConfiguration` is used.
66
80
  */
67
- constructor(options?: IFrameworkConfiguration) {
68
- options = options ?? new FrameworkConfiguration();
81
+ constructor(configuration?: IFrameworkConfiguration) {
82
+
83
+ this._configuration = configuration ?? {}
84
+
85
+ if(!this._configuration.backBufferSize){
86
+ this._configuration.backBufferSize = vec2.fromValues(800, 600);
87
+ }
69
88
 
70
89
  // Without a canvas, WindowManager creates one and appends it to document.body.
71
- if(!options.canvas){
90
+ if(!this._configuration.canvas){
72
91
  console.warn("Canvas not provided. Creating canvas and appending it to document.body.")
73
92
  }
74
- options.backBufferSize = options.backBufferSize ?? vec2.fromValues(800, 600);
93
+ this._configuration.backBufferSize = this._configuration.backBufferSize ?? vec2.fromValues(800, 600);
75
94
 
76
- this._container = container.createChildContainer();
77
- this.windowManager = new WindowManager(options.canvas ?? null);
95
+ this.windowManager = new WindowManager(this._configuration.canvas ?? null);
78
96
 
79
- // Setup container.
80
- const rendererConfig: IRendererConfiguration = {
81
- backBufferSize: options.backBufferSize,
82
- textureFiltering: options.textureFiltering ?? TextureSamplerFilteringPreset.BILINEAR,
83
- alpha: options.alpha ?? false,
84
- powerPreference: options.powerPreference ?? PowerPreferenceType.DEFAULT
97
+ // Services are created here and get their dependencies through their constructors.
98
+ this._rendererConfiguration = {
99
+ backBufferSize: this._configuration.backBufferSize,
100
+ textureFiltering: this._configuration.textureFiltering ?? TextureSamplerFilteringPreset.BILINEAR,
101
+ alpha: this._configuration.alpha ?? false,
102
+ powerPreference: this._configuration.powerPreference ?? PowerPreferenceType.DEFAULT,
103
+ textureColorSpace: this._configuration.textureColorSpace ?? TextureColorSpace.SRGB
85
104
  };
86
- this._container.registerInstance(RenderConfigurationSymbol, rendererConfig);
87
- this.renderer = new WebGlRenderer(this, rendererConfig);
88
- this.renderingBackend = RenderingBackend.WEB_GL;
89
- this._textureFactory = new WebGlTextureFactory(this);
105
+
106
+
107
+ // The renderer, texture, pipeline, shader and buffer services depend on the backend.
108
+ let backend = this._configuration.renderingBackend ?? RenderingBackend.WEB_GL;
109
+ if (backend === RenderingBackend.DEFAULT) {
110
+ backend = RenderingBackend.WEB_GL;
111
+ }
112
+ if (backend === RenderingBackend.WEB_GPU && !WebGpuRenderer.isSupported()) {
113
+ console.warn("WebGPU was requested, but navigator.gpu is missing. Falling back to WebGL.");
114
+ backend = RenderingBackend.WEB_GL;
115
+ }
116
+ this.renderingBackend = backend;
117
+ this._setupBackendServices(backend);
118
+
90
119
  this._geometryBuilder = new GeometryBuilder();
91
- this.renderPipelineFactory = new WebGlRenderPipelineFactory(this);
92
- this._contentManager = new ContentManager(this, new WebGlShaderModuleLoader(this));
93
120
  this._meshFactory = new MeshFactory(this);
94
121
  this.materialFactory = new MaterialFactory(this);
122
+ this.lightsFactory = new WebGlAmbientLightFactory(this);
95
123
 
96
- this._buffersFactory = new WebGlBuffersFactory(this);
97
124
  this.spriteBatch = new SpriteBatch(this);
98
125
  this.cameraFactory = new CameraFactory(this);
99
126
  this.timeManager = new TimeManager();
@@ -101,7 +128,7 @@ export class Framework implements IFramework {
101
128
  this.imageProcessor = new CpuImageProcessor();
102
129
  this.imageLoader = new ImageLoader(this);
103
130
 
104
- if(options.useKtx2){
131
+ if(this._configuration.useKtx2){
105
132
  this.ktx2Factory = new Ktx2Factory();
106
133
  }
107
134
  }
@@ -115,7 +142,30 @@ export class Framework implements IFramework {
115
142
  public readonly imageProcessor :IImageProcessor;
116
143
 
117
144
  /** @inheritDoc */
118
- public readonly renderer : IRenderer;
145
+ public get renderer(): IRenderer {
146
+ return this._renderer;
147
+ }
148
+
149
+ /**
150
+ * Creates the backend-specific services: renderer, texture factory, pipeline factory, shader loader and buffers factory.
151
+ * @param backend WEB_GL or WEB_GPU.
152
+ */
153
+ private _setupBackendServices(backend: RenderingBackend): void {
154
+ this.renderingBackend = backend;
155
+ if (backend === RenderingBackend.WEB_GPU) {
156
+ this._renderer = new WebGpuRenderer(this, this._rendererConfiguration);
157
+ this._textureFactory = new WebGpuTextureFactory(this);
158
+ this.renderPipelineFactory = new WebGpuRenderPipelineFactory(this);
159
+ this._contentManager = new ContentManager(this, new WebGpuShaderModuleLoader(this));
160
+ this._buffersFactory = new WebGpuBuffersFactory(this);
161
+ } else {
162
+ this._renderer = new WebGlRenderer(this, this._rendererConfiguration);
163
+ this._textureFactory = new WebGlTextureFactory(this);
164
+ this.renderPipelineFactory = new WebGlRenderPipelineFactory(this);
165
+ this._contentManager = new ContentManager(this, new WebGlShaderModuleLoader(this));
166
+ this._buffersFactory = new WebGlBuffersFactory(this);
167
+ }
168
+ }
119
169
 
120
170
  /** @inheritDoc */
121
171
  public readonly spriteBatch: ISpriteBatch;
@@ -183,7 +233,7 @@ export class Framework implements IFramework {
183
233
  }
184
234
 
185
235
  /** @inheritdoc */
186
- public renderPipelineFactory: IRenderPipelineFactory;
236
+ public renderPipelineFactory: IRenderPipelineFactory = null!;
187
237
 
188
238
  /** @inheritdoc */
189
239
  get geometryBuilder(): IGeometryBuilder {
@@ -213,9 +263,15 @@ export class Framework implements IFramework {
213
263
  return this._meshFactory;
214
264
  }
215
265
 
266
+ /** @inheritDoc */
267
+ public readonly objLoader: ObjLoader = new ObjLoader(this);
268
+
216
269
  /** @inheritDoc */
217
270
  public readonly materialFactory: IMaterialFactory;
218
271
 
272
+ /** @inheritDoc */
273
+ public readonly lightsFactory: AmbientLightFactory;
274
+
219
275
  /** @inheritDoc */
220
276
  public readonly timeManager: ITimeManager;
221
277
 
@@ -225,22 +281,55 @@ export class Framework implements IFramework {
225
281
  /** @inheritdoc */
226
282
  public initialize(): void {
227
283
 
284
+ // WebGPU needs an async device request; initialize() keeps the synchronous WebGL path.
285
+ if (this.renderingBackend === RenderingBackend.WEB_GPU) {
286
+ console.warn("WebGPU needs Framework.initializeAsync(). initialize() falls back to WebGL.");
287
+ this._setupBackendServices(RenderingBackend.WEB_GL);
288
+ }
289
+
228
290
  if(this.ktx2Factory) {
229
291
  this.ktx2Factory.initializeAsync();
230
292
  }
231
293
 
232
- (this.renderer as WebGlRenderer).initialize();
294
+ this._initializeCore();
295
+ }
296
+
297
+ /**
298
+ * Initializes the framework and starts the event loop. Required for WebGPU, which requests its adapter
299
+ * and device asynchronously; for WebGL it behaves like {@link initialize}.
300
+ * If the WebGPU device cannot be acquired, the framework falls back to WebGL with a warning.
301
+ */
302
+ public async initializeAsync(): Promise<void> {
303
+ if (this.renderingBackend === RenderingBackend.WEB_GPU) {
304
+ try {
305
+ await (this._renderer as WebGpuRenderer).acquireDeviceAsync();
306
+ } catch (error) {
307
+ console.warn(`WebGPU could not be initialized (${(error as Error)?.message ?? error}). Falling back to WebGL.`);
308
+ this._setupBackendServices(RenderingBackend.WEB_GL);
309
+ }
310
+ }
311
+
312
+ if (this.ktx2Factory) {
313
+ this.ktx2Factory.initializeAsync();
314
+ }
315
+
316
+ this._initializeCore();
317
+ }
318
+
319
+ private _initializeCore(): void {
320
+ (this._renderer as ARenderer).initialize();
233
321
  this.spriteBatch.initialize();
234
322
  this.input.initialize();
235
323
 
236
324
  this.timeManager.prepareStart();
237
325
 
238
- // Load content events.
239
- for(const listener of this._onLoadContentListeners){
326
+ // Initialize callbacks.
327
+ for(const listener of this._onInitializeListeners){
240
328
  listener();
241
329
  }
242
330
 
243
- for(const listener of this._onInitializeListeners){
331
+ // Load content events.
332
+ for(const listener of this._onLoadContentListeners){
244
333
  listener();
245
334
  }
246
335
 
@@ -271,10 +360,29 @@ export class Framework implements IFramework {
271
360
  this.windowManager.runEventLoop();
272
361
  }
273
362
 
274
- /** @inheritDoc */
275
- public dispose() {
276
- // this.windowManager.dispose();
363
+ /**
364
+ * Stops the event loop and disposes the framework's services and GL resources,
365
+ * including per-framework caches such as the default texture and the shader modules.
366
+ * A new `Framework` afterwards creates fresh resources on its own context. Calling it twice does nothing.
367
+ */
368
+ public dispose(): void {
369
+ if (this._disposed) {
370
+ return;
371
+ }
372
+ this._disposed = true;
373
+
374
+ this.windowManager.dispose();
375
+ (this.input as Partial<IDisposable>).dispose?.();
376
+
377
+ this._onLoadContentListeners.length = 0;
378
+ this._onInitializeListeners.length = 0;
379
+ this._onUpdateListeners.length = 0;
380
+ this._onRenderListeners.length = 0;
277
381
 
278
- // TODO: dispose of other resources
382
+ WebGlTexture2D.disposeDefault(this);
383
+ WebGpuTexture2D.disposeDefault(this);
384
+ (this._contentManager as Partial<IDisposable>).dispose?.();
385
+ // Only exists after initialize(); it owns the default sampler and blend state.
386
+ (this.renderer.graphicsDevice as IGraphicsDevice | undefined)?.dispose();
279
387
  }
280
388
  }
@@ -7,10 +7,12 @@ import type { IBufferFactory } from "./rendering/buffers/IBufferFactory.ts";
7
7
  import type { IGeometryBuilder } from "./geometry/IGeometryBuilder.ts";
8
8
  import type { ICameraFactory } from "./camera/ICameraFactory.ts";
9
9
  import type { ITextureFactory } from "./rendering/texture/ITextureFactory.ts";
10
+ import type { ObjLoader } from "./loaders/ObjLoader.ts";
10
11
  import type { IContentManager } from "./content/IContentManager.ts";
11
12
  import type { IImageLoader } from "./loaders/IImageLoader.ts";
12
13
  import type { IMeshFactory } from "./meshes/IMeshFactory.ts";
13
14
  import type { IMaterialFactory } from "./material/IMaterialFactory.ts";
15
+ import type { AmbientLightFactory } from "./lights/LightFactory.ts";
14
16
  import type { ITimeManager } from "./time/ITimeManager.ts";
15
17
  import type { IInputManager } from "./input/IInputManager.ts";
16
18
  import type { IWindowManager } from "./window/IWindowManager.ts";
@@ -18,6 +20,49 @@ import {GameTime} from "./time/GameTime.ts";
18
20
  import type { IImageProcessor } from "./image/IImageProcessor.ts";
19
21
  import type { IKtx2Factory } from "ris-ktx2";
20
22
  import type { IDisposable } from "./core/IDisposable.ts";
23
+ import type {vec2} from "gl-matrix";
24
+ import type {TextureSamplerFilteringPreset} from "../core/rendering/enums.ts";
25
+ import type {PowerPreferenceType} from "./rendering/PowerPreference.ts";
26
+ import type {TextureColorSpace} from "./rendering/enums.ts";
27
+
28
+
29
+ /**
30
+ * The configuration for the framework.
31
+ * @public
32
+ **/
33
+ export class IFrameworkConfiguration {
34
+
35
+ /** If true, creates and makes the KTX2 factory available. */
36
+ useKtx2?: boolean;
37
+
38
+ /** The size of back buffer. By default, if not specified (800, 600). */
39
+ backBufferSize?: vec2;
40
+
41
+ /** The texture filtering to configure */
42
+ textureFiltering?: TextureSamplerFilteringPreset;
43
+
44
+ /** The texture color space to use by default. By default, it is {@link TextureColorSpace.SRGB}. */
45
+ textureColorSpace?: TextureColorSpace;
46
+
47
+ /**
48
+ * The HTMLCanvasElement to use for rendering.
49
+ * If null, a new canvas will be created and added to the document body.
50
+ */
51
+ canvas?: HTMLCanvasElement;
52
+
53
+ /** Should back buffer use alpha. */
54
+ alpha?: boolean;
55
+
56
+ /** The preference when it comes to selecting GPU device. Only makes sense to set on multi-GPU devices. */
57
+ powerPreference ?: PowerPreferenceType;
58
+
59
+ /**
60
+ * The rendering backend. Defaults to WebGL.
61
+ * WebGPU requires `Framework.initializeAsync()`; when `navigator.gpu` is missing or no device is available,
62
+ * the framework falls back to WebGL with a warning.
63
+ */
64
+ renderingBackend?: RenderingBackend;
65
+ }
21
66
 
22
67
  /** The framework interface. */
23
68
  export interface IFramework extends IDisposable {
@@ -86,11 +131,21 @@ export interface IFramework extends IDisposable {
86
131
  */
87
132
  readonly meshFactory: IMeshFactory;
88
133
 
134
+ /**
135
+ * The OBJ loader: `objLoader.loadAsync(path, blinnPhongDescriptor | subMesh => material)`.
136
+ */
137
+ readonly objLoader: ObjLoader;
138
+
89
139
  /**
90
140
  * The material factory.
91
141
  */
92
142
  readonly materialFactory: IMaterialFactory;
93
143
 
144
+ /**
145
+ * The ambient light factory.
146
+ */
147
+ readonly lightsFactory: AmbientLightFactory;
148
+
94
149
  /**
95
150
  * The time manager.
96
151
  */
@@ -117,14 +172,10 @@ export interface IFramework extends IDisposable {
117
172
  */
118
173
  removeOnLoadContentListener(event: () => void): void;
119
174
 
120
- /**
121
- * Called when the framework is initialized.
122
- */
175
+ /** Called when the framework is initialized.*/
123
176
  addOnInitializedListener(event: () => void): void;
124
177
 
125
- /**
126
- * Called when the framework is initialized.
127
- */
178
+ /** Called when the framework is initialized.*/
128
179
  removeOnInitializedListener(event: () => void): void;
129
180
 
130
181
  /**
@@ -150,4 +201,10 @@ export interface IFramework extends IDisposable {
150
201
  /** Initializes the framework. */
151
202
  initialize(): void;
152
203
 
204
+ /**
205
+ * Initializes the framework asynchronously and starts the event loop.
206
+ * Required for the WebGPU backend; for WebGL it behaves like {@link initialize}.
207
+ */
208
+ initializeAsync(): Promise<void>;
209
+
153
210
  }
@@ -1,5 +1,4 @@
1
1
  export * from "./IFramework.ts";
2
- export * from "./IFrameworkConfiguration.ts";
3
2
  export * from "./rendering/texture/_export-texture.ts";
4
3
  export * from "./rendering/buffers/_export-buffers.ts";
5
4
  export * from "./data/_export.ts";
@@ -22,5 +21,8 @@ export * from "./rendering/sampler/_export.ts"
22
21
  export * from "./utilities/_export.ts"
23
22
  export * from "./meshes/_export.ts";
24
23
  export * from "./material/_export.ts";
24
+ export * from "./lights/_export.ts";
25
+ export * from "./scene/Scene.ts";
26
+ export * from "./scene/SceneMesh.ts";
25
27
  export * from "./input/_export.ts";
26
28
  export * from "./image/_export.ts";
@@ -1,11 +1,11 @@
1
1
  import {vec2} from "gl-matrix";
2
2
  import type { ICameraFactory } from "./ICameraFactory.ts";
3
+ import type { Scene } from "../scene/Scene.ts";
3
4
  import type { IFramework } from "../IFramework.ts";
4
5
  import type { IOrthographicCamera } from "./IOrthographicCamera.ts";
5
6
  import {OrthographicCamera} from "./OrthographicCamera.ts";
6
7
  import {OrbitCamera} from "./OrbitCamera.ts";
7
- import {PerspectiveCamera} from "./PerspectiveCamera.ts";
8
- import {MathHelper} from "../utilities/MathHelper.ts";
8
+ import {PerspectiveCamera, type PerspectiveCameraDescriptor} from "./PerspectiveCamera.ts";
9
9
 
10
10
  /** The Camera Factory */
11
11
  export class CameraFactory implements ICameraFactory {
@@ -41,15 +41,15 @@ export class CameraFactory implements ICameraFactory {
41
41
 
42
42
  /** @inheritDoc */
43
43
  public createOrbitCamera(fov = 60, aspectRatio = 1, near = 0.01, far = 100): OrbitCamera {
44
- return new OrbitCamera(this.createPerspectiveCamera(fov, aspectRatio, near, far), this._framework.input);
44
+ return new OrbitCamera(this.createPerspectiveCamera({fov, aspectRatio, near, far}), this._framework.input);
45
45
 
46
46
  }
47
47
 
48
48
  /** @inheritDoc */
49
- public createPerspectiveCamera(fov= 60, aspectRatio = 1, near= 0.01, far = 100): PerspectiveCamera {
50
- fov = MathHelper.toRadians(fov);
51
- const camera = new PerspectiveCamera(this._framework, fov, aspectRatio, near, far);
49
+ public createPerspectiveCamera(descriptor?: PerspectiveCameraDescriptor, scene? : Scene): PerspectiveCamera {
50
+ const camera = new PerspectiveCamera(this._framework, descriptor, scene);
52
51
  camera.initialize();
52
+
53
53
  return camera;
54
54
  }
55
55
 
@@ -36,6 +36,12 @@ export interface ICamera extends IDisposable {
36
36
  */
37
37
  readonly viewBuffer: IUniformBuffer;
38
38
 
39
+ /**
40
+ * The world-space eye position buffer, std140 `vec3` (`[x, y, z, 0]`).
41
+ * Used by lit materials for specular highlights.
42
+ */
43
+ readonly positionBuffer: IUniformBuffer;
44
+
39
45
  /**
40
46
  * Update the GPU buffers.
41
47
  * This needs to be called when camera properties are changed.
@@ -1,7 +1,8 @@
1
1
  import type { IOrthographicCamera } from "./IOrthographicCamera.ts";
2
2
  import {vec2} from "gl-matrix";
3
3
  import {OrbitCamera} from "./OrbitCamera.ts";
4
- import {PerspectiveCamera} from "./PerspectiveCamera.ts";
4
+ import {PerspectiveCamera, type PerspectiveCameraDescriptor} from "./PerspectiveCamera.ts";
5
+ import type {Scene} from "../scene/Scene.ts";
5
6
 
6
7
  /**
7
8
  * The camera factory.
@@ -10,17 +11,11 @@ export interface ICameraFactory {
10
11
 
11
12
  /**
12
13
  * Creates a new perspective camera.
13
- * @param fov The field of view. By default, 60 degrees.
14
- * @param aspectRatio The aspect ratio. By default, 1.
15
- * @param near The near plane. By default, 0.01.
16
- * @param far The far plane. By default, 100.
14
+ * @param descriptor The optional descriptor; omitted fields use the defaults documented on {@link PerspectiveCameraDescriptor}.
15
+ * @param scene The optional scene; the camera becomes its `scene.camera`.
17
16
  * @return The perspective camera.
18
17
  */
19
- createPerspectiveCamera(
20
- fov?: number,
21
- aspectRatio?: number,
22
- near?: number,
23
- far?: number): PerspectiveCamera;
18
+ createPerspectiveCamera(descriptor?: PerspectiveCameraDescriptor, scene?: Scene): PerspectiveCamera;
24
19
 
25
20
  /**
26
21
  * Creates a new orthographic camera which is suitable for 2D games, or for UI rendering.
@@ -40,6 +40,9 @@ export class OrthographicCamera implements IOrthographicCamera {
40
40
  private _projectionBuffer: IUniformBuffer = null!;
41
41
  private _viewBuffer: IUniformBuffer = null!;
42
42
  private _projectionViewBuffer: IUniformBuffer = null!;
43
+ private _positionBuffer: IUniformBuffer = null!;
44
+ /** std140 vec3 world-space eye, padded to 4 floats. */
45
+ private readonly _positionData = [0, 0, 0, 0];
43
46
 
44
47
  /**
45
48
  *
@@ -69,7 +72,7 @@ export class OrthographicCamera implements IOrthographicCamera {
69
72
  this._near = near;
70
73
  this._far = far;
71
74
 
72
- this._eye = vec3.fromValues(0, 0, -1);
75
+ this._eye = vec3.fromValues(0, 0, 1);
73
76
  this._target = vec3.fromValues(0, 0, 0);
74
77
 
75
78
  this._zSpaceLength = 2; // For WebGL2 it is 2, WebGPU it is 1.
@@ -204,6 +207,19 @@ export class OrthographicCamera implements IOrthographicCamera {
204
207
  return this._viewBuffer;
205
208
  }
206
209
 
210
+ /** @inheritDoc */
211
+ public get positionBuffer(): IUniformBuffer {
212
+ return this._positionBuffer;
213
+ }
214
+
215
+ /** Writes the world-space eye into the std140 position data (no z flip: the look-at uses the eye as is). */
216
+ private _updatePositionData(): number[] {
217
+ this._positionData[0] = this._eye[0];
218
+ this._positionData[1] = this._eye[1];
219
+ this._positionData[2] = this._eye[2];
220
+ return this._positionData;
221
+ }
222
+
207
223
  /**
208
224
  * Updates the camera matrices.
209
225
  */
@@ -227,6 +243,10 @@ export class OrthographicCamera implements IOrthographicCamera {
227
243
  this._projectionViewBuffer = this._framework.bufferFactory.createUniformBuffer(
228
244
  this._projectionViewMatrix, BufferUsage.UNIFORM, "OrthographicCamera.projectionViewBuffer"
229
245
  );
246
+
247
+ this._positionBuffer = this._framework.bufferFactory.createUniformBuffer(
248
+ this._updatePositionData(), BufferUsage.UNIFORM, "OrthographicCamera.positionBuffer"
249
+ );
230
250
  }
231
251
 
232
252
  /** @inheritDoc */
@@ -235,6 +255,7 @@ export class OrthographicCamera implements IOrthographicCamera {
235
255
  this.projectionBuffer.update(this.projectionMatrix);
236
256
  this.viewBuffer.update(this.viewMatrix);
237
257
  this.projectionViewBuffer.update(this.projectionViewMatrix);
258
+ this.positionBuffer.update(this._updatePositionData());
238
259
  }
239
260
 
240
261
  /** @inheritDoc */
@@ -253,5 +274,6 @@ export class OrthographicCamera implements IOrthographicCamera {
253
274
  this.projectionBuffer.dispose();
254
275
  this.projectionViewBuffer.dispose();
255
276
  this.viewBuffer.dispose();
277
+ this.positionBuffer.dispose();
256
278
  }
257
279
  }