ris-framework 0.1.0 → 0.2.0-dev.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/CHANGELOG.md +42 -1
  2. package/README.md +27 -4
  3. package/dist/Framework.d.ts +34 -10
  4. package/dist/Framework.d.ts.map +1 -1
  5. package/dist/api/IFramework.d.ts +50 -6
  6. package/dist/api/IFramework.d.ts.map +1 -1
  7. package/dist/api/_export.d.ts +3 -1
  8. package/dist/api/_export.d.ts.map +1 -1
  9. package/dist/api/camera/CameraFactory.d.ts +3 -2
  10. package/dist/api/camera/CameraFactory.d.ts.map +1 -1
  11. package/dist/api/camera/ICamera.d.ts +5 -0
  12. package/dist/api/camera/ICamera.d.ts.map +1 -1
  13. package/dist/api/camera/ICameraFactory.d.ts +5 -6
  14. package/dist/api/camera/ICameraFactory.d.ts.map +1 -1
  15. package/dist/api/camera/OrthographicCamera.d.ts +7 -0
  16. package/dist/api/camera/OrthographicCamera.d.ts.map +1 -1
  17. package/dist/api/camera/PerspectiveCamera.d.ts +30 -6
  18. package/dist/api/camera/PerspectiveCamera.d.ts.map +1 -1
  19. package/dist/api/content/ContentManager.d.ts +15 -2
  20. package/dist/api/content/ContentManager.d.ts.map +1 -1
  21. package/dist/api/content/IContentManager.d.ts +35 -1
  22. package/dist/api/content/IContentManager.d.ts.map +1 -1
  23. package/dist/api/content/ShaderModuleContent.d.ts.map +1 -1
  24. package/dist/api/data/Color.d.ts +5 -0
  25. package/dist/api/data/Color.d.ts.map +1 -1
  26. package/dist/api/geometry/BaseGeometry.d.ts +9 -0
  27. package/dist/api/geometry/BaseGeometry.d.ts.map +1 -1
  28. package/dist/api/geometry/GeometryBuilder.d.ts +3 -1
  29. package/dist/api/geometry/GeometryBuilder.d.ts.map +1 -1
  30. package/dist/api/geometry/IGeometryBuilder.d.ts +24 -0
  31. package/dist/api/geometry/IGeometryBuilder.d.ts.map +1 -1
  32. package/dist/api/geometry/_export-geometry.d.ts +1 -0
  33. package/dist/api/geometry/_export-geometry.d.ts.map +1 -1
  34. package/dist/api/input/InputManager.d.ts +4 -0
  35. package/dist/api/input/InputManager.d.ts.map +1 -1
  36. package/dist/api/lights/AmbientLight.d.ts +35 -0
  37. package/dist/api/lights/AmbientLight.d.ts.map +1 -0
  38. package/dist/api/lights/DirectionalLight.d.ts +40 -0
  39. package/dist/api/lights/DirectionalLight.d.ts.map +1 -0
  40. package/dist/api/lights/LightFactory.d.ts +18 -0
  41. package/dist/api/lights/LightFactory.d.ts.map +1 -0
  42. package/dist/api/lights/LightId.d.ts +6 -0
  43. package/dist/api/lights/LightId.d.ts.map +1 -0
  44. package/dist/api/lights/LightsBuffer.d.ts +77 -0
  45. package/dist/api/lights/LightsBuffer.d.ts.map +1 -0
  46. package/dist/api/lights/PointLight.d.ts +59 -0
  47. package/dist/api/lights/PointLight.d.ts.map +1 -0
  48. package/dist/api/lights/_export.d.ts +6 -0
  49. package/dist/api/lights/_export.d.ts.map +1 -0
  50. package/dist/api/loaders/ObjGeometryMapper.d.ts +19 -0
  51. package/dist/api/loaders/ObjGeometryMapper.d.ts.map +1 -0
  52. package/dist/api/loaders/ObjLoader.d.ts +61 -0
  53. package/dist/api/loaders/ObjLoader.d.ts.map +1 -0
  54. package/dist/api/loaders/_export.d.ts +2 -0
  55. package/dist/api/loaders/_export.d.ts.map +1 -1
  56. package/dist/api/loaders/obj/ObjParser.d.ts +44 -0
  57. package/dist/api/loaders/obj/ObjParser.d.ts.map +1 -0
  58. package/dist/api/loaders/obj/ObjTypes.d.ts +119 -0
  59. package/dist/api/loaders/obj/ObjTypes.d.ts.map +1 -0
  60. package/dist/api/loaders/obj/index.d.ts +3 -0
  61. package/dist/api/loaders/obj/index.d.ts.map +1 -0
  62. package/dist/api/material/ForwardBlinnPhongMaterial.d.ts +138 -0
  63. package/dist/api/material/ForwardBlinnPhongMaterial.d.ts.map +1 -0
  64. package/dist/api/material/ICameraMaterial.d.ts +18 -0
  65. package/dist/api/material/ICameraMaterial.d.ts.map +1 -0
  66. package/dist/api/material/ILightsMaterial.d.ts +26 -0
  67. package/dist/api/material/ILightsMaterial.d.ts.map +1 -0
  68. package/dist/api/material/IMaterial.d.ts +13 -10
  69. package/dist/api/material/IMaterial.d.ts.map +1 -1
  70. package/dist/api/material/IMaterialFactory.d.ts +17 -2
  71. package/dist/api/material/IMaterialFactory.d.ts.map +1 -1
  72. package/dist/api/material/InspectTextureMipsMaterial.d.ts +18 -9
  73. package/dist/api/material/InspectTextureMipsMaterial.d.ts.map +1 -1
  74. package/dist/api/material/MaterialFactory.d.ts +6 -0
  75. package/dist/api/material/MaterialFactory.d.ts.map +1 -1
  76. package/dist/api/material/SpriteMaterial.d.ts +51 -0
  77. package/dist/api/material/SpriteMaterial.d.ts.map +1 -0
  78. package/dist/api/material/UnlitMaterial.d.ts +32 -13
  79. package/dist/api/material/UnlitMaterial.d.ts.map +1 -1
  80. package/dist/api/material/_export.d.ts +4 -0
  81. package/dist/api/material/_export.d.ts.map +1 -1
  82. package/dist/api/meshes/IMesh.d.ts +31 -6
  83. package/dist/api/meshes/IMesh.d.ts.map +1 -1
  84. package/dist/api/meshes/IMeshFactory.d.ts +30 -4
  85. package/dist/api/meshes/IMeshFactory.d.ts.map +1 -1
  86. package/dist/api/meshes/IRenderableMesh.d.ts +47 -0
  87. package/dist/api/meshes/IRenderableMesh.d.ts.map +1 -0
  88. package/dist/api/meshes/Mesh.d.ts +14 -8
  89. package/dist/api/meshes/Mesh.d.ts.map +1 -1
  90. package/dist/api/meshes/MeshFactory.d.ts +10 -3
  91. package/dist/api/meshes/MeshFactory.d.ts.map +1 -1
  92. package/dist/api/meshes/QuadMesh.d.ts +5 -3
  93. package/dist/api/meshes/QuadMesh.d.ts.map +1 -1
  94. package/dist/api/meshes/RenderableMesh.d.ts +95 -0
  95. package/dist/api/meshes/RenderableMesh.d.ts.map +1 -0
  96. package/dist/api/meshes/_export.d.ts +2 -0
  97. package/dist/api/meshes/_export.d.ts.map +1 -1
  98. package/dist/api/rendering/IGraphicsDeviceFeatures.d.ts +8 -2
  99. package/dist/api/rendering/IGraphicsDeviceFeatures.d.ts.map +1 -1
  100. package/dist/api/rendering/IRenderer.d.ts +28 -1
  101. package/dist/api/rendering/IRenderer.d.ts.map +1 -1
  102. package/dist/api/rendering/enums.d.ts +7 -0
  103. package/dist/api/rendering/enums.d.ts.map +1 -1
  104. package/dist/api/rendering/render-pipelines/IForwardBlinnPhongRenderPipeline.d.ts +56 -0
  105. package/dist/api/rendering/render-pipelines/IForwardBlinnPhongRenderPipeline.d.ts.map +1 -0
  106. package/dist/api/rendering/render-pipelines/IRenderPipeline.d.ts +3 -0
  107. package/dist/api/rendering/render-pipelines/IRenderPipeline.d.ts.map +1 -1
  108. package/dist/api/rendering/render-pipelines/IRenderPipelineFactory.d.ts +29 -0
  109. package/dist/api/rendering/render-pipelines/IRenderPipelineFactory.d.ts.map +1 -1
  110. package/dist/api/rendering/render-pipelines/_export-render-pipelines.d.ts +1 -0
  111. package/dist/api/rendering/render-pipelines/_export-render-pipelines.d.ts.map +1 -1
  112. package/dist/api/rendering/renderer-interface.d.ts +1 -31
  113. package/dist/api/rendering/renderer-interface.d.ts.map +1 -1
  114. package/dist/api/rendering/renderpass/RenderPassDescriptor.d.ts +2 -6
  115. package/dist/api/rendering/renderpass/RenderPassDescriptor.d.ts.map +1 -1
  116. package/dist/api/rendering/swapchain/ISwapChain.d.ts +1 -3
  117. package/dist/api/rendering/swapchain/ISwapChain.d.ts.map +1 -1
  118. package/dist/api/rendering/texture/TextureFormat.d.ts +88 -14
  119. package/dist/api/rendering/texture/TextureFormat.d.ts.map +1 -1
  120. package/dist/api/rendering/texture/TextureUtilities.d.ts +23 -0
  121. package/dist/api/rendering/texture/TextureUtilities.d.ts.map +1 -1
  122. package/dist/api/scene/Scene.d.ts +113 -0
  123. package/dist/api/scene/Scene.d.ts.map +1 -0
  124. package/dist/api/scene/SceneMesh.d.ts +27 -0
  125. package/dist/api/scene/SceneMesh.d.ts.map +1 -0
  126. package/dist/api/shader/IShaderModuleLoader.d.ts +4 -1
  127. package/dist/api/shader/IShaderModuleLoader.d.ts.map +1 -1
  128. package/dist/api/shader/{shader-loader.d.ts → ShaderLoader.d.ts} +1 -1
  129. package/dist/api/shader/ShaderLoader.d.ts.map +1 -0
  130. package/dist/api/sprites/SpriteBatchDrawable.d.ts +1 -1
  131. package/dist/api/sprites/SpriteBatchDrawable.d.ts.map +1 -1
  132. package/dist/api/sprites/SpriteBatchMesh.d.ts +14 -1
  133. package/dist/api/sprites/SpriteBatchMesh.d.ts.map +1 -1
  134. package/dist/api/utilities/AlignUtilities.d.ts.map +1 -1
  135. package/dist/api/utilities/GeometryUtilities.d.ts.map +1 -1
  136. package/dist/api/window/WindowManager.d.ts +4 -0
  137. package/dist/api/window/WindowManager.d.ts.map +1 -1
  138. package/dist/core/rendering/ARenderer.d.ts +5 -5
  139. package/dist/core/rendering/ARenderer.d.ts.map +1 -1
  140. package/dist/core/rendering/vertex-buffer-layout.d.ts +1 -0
  141. package/dist/core/rendering/vertex-buffer-layout.d.ts.map +1 -1
  142. package/dist/index.d.ts +0 -1
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js +9238 -4595
  145. package/dist/webgl/WebGLGraphicsDeviceFeatures.d.ts +4 -0
  146. package/dist/webgl/WebGLGraphicsDeviceFeatures.d.ts.map +1 -1
  147. package/dist/webgl/WebGlGraphicsDevice.d.ts.map +1 -1
  148. package/dist/webgl/WebGlRenderer.d.ts +1 -3
  149. package/dist/webgl/WebGlRenderer.d.ts.map +1 -1
  150. package/dist/webgl/lights/WebGlAmbientLightFactory.d.ts +17 -0
  151. package/dist/webgl/lights/WebGlAmbientLightFactory.d.ts.map +1 -0
  152. package/dist/webgl/lights/WebGlLightsBuffer.d.ts +59 -0
  153. package/dist/webgl/lights/WebGlLightsBuffer.d.ts.map +1 -0
  154. package/dist/webgl/render-pipelines/AWebGlRenderPipeline.d.ts +3 -1
  155. package/dist/webgl/render-pipelines/AWebGlRenderPipeline.d.ts.map +1 -1
  156. package/dist/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.d.ts +5 -0
  157. package/dist/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.d.ts.map +1 -1
  158. package/dist/webgl/render-pipelines/WebGlRenderPipelineFactory.d.ts +3 -1
  159. package/dist/webgl/render-pipelines/WebGlRenderPipelineFactory.d.ts.map +1 -1
  160. package/dist/webgl/render-pipelines/inspect/WebGlInspectTextureMipsRenderPipeline.d.ts +3 -1
  161. package/dist/webgl/render-pipelines/inspect/WebGlInspectTextureMipsRenderPipeline.d.ts.map +1 -1
  162. package/dist/webgl/render-pipelines/material/WebGlBlinnPhongRenderPipeline.d.ts +88 -0
  163. package/dist/webgl/render-pipelines/material/WebGlBlinnPhongRenderPipeline.d.ts.map +1 -0
  164. package/dist/webgl/render-pipelines/material/WebGlUnlitRenderPipeline.d.ts +3 -1
  165. package/dist/webgl/render-pipelines/material/WebGlUnlitRenderPipeline.d.ts.map +1 -1
  166. package/dist/webgl/render-pipelines/sprite/WebGlSpriteRenderPipeline.d.ts +3 -1
  167. package/dist/webgl/render-pipelines/sprite/WebGlSpriteRenderPipeline.d.ts.map +1 -1
  168. package/dist/webgl/shader/WebGlShaderModule.d.ts +4 -1
  169. package/dist/webgl/shader/WebGlShaderModule.d.ts.map +1 -1
  170. package/dist/webgl/shader/WebGlShaderModuleLoader.d.ts +16 -5
  171. package/dist/webgl/shader/WebGlShaderModuleLoader.d.ts.map +1 -1
  172. package/dist/webgl/swap-chain/WebGlSwapChain.d.ts +3 -2
  173. package/dist/webgl/swap-chain/WebGlSwapChain.d.ts.map +1 -1
  174. package/dist/webgl/texture/WebGlTexture2D.d.ts +8 -1
  175. package/dist/webgl/texture/WebGlTexture2D.d.ts.map +1 -1
  176. package/dist/webgl/texture/WebGlTextureFactory.d.ts +7 -0
  177. package/dist/webgl/texture/WebGlTextureFactory.d.ts.map +1 -1
  178. package/dist/webgl/utilities/WebGlConstants.d.ts +91 -0
  179. package/dist/webgl/utilities/WebGlConstants.d.ts.map +1 -0
  180. package/dist/webgl/utilities/WebGlConverter.d.ts +0 -7
  181. package/dist/webgl/utilities/WebGlConverter.d.ts.map +1 -1
  182. package/dist/webgl/utilities/WebGlErrorUtilities.d.ts +10 -0
  183. package/dist/webgl/utilities/WebGlErrorUtilities.d.ts.map +1 -0
  184. package/dist/webgl/utilities/WebGlTextureUtilities.d.ts.map +1 -1
  185. package/dist/webgl/utilities/WebGlUtilities.d.ts +3 -0
  186. package/dist/webgl/utilities/WebGlUtilities.d.ts.map +1 -1
  187. package/dist/webgl/utilities/webgl-filter-anisotropic-utilities.d.ts +0 -1
  188. package/dist/webgl/utilities/webgl-filter-anisotropic-utilities.d.ts.map +1 -1
  189. package/dist/webgpu/WebGpuGpuInfo.d.ts +28 -0
  190. package/dist/webgpu/WebGpuGpuInfo.d.ts.map +1 -0
  191. package/dist/webgpu/WebGpuGraphicsDevice.d.ts +80 -0
  192. package/dist/webgpu/WebGpuGraphicsDevice.d.ts.map +1 -0
  193. package/dist/webgpu/WebGpuGraphicsDeviceFeatures.d.ts +26 -0
  194. package/dist/webgpu/WebGpuGraphicsDeviceFeatures.d.ts.map +1 -0
  195. package/dist/webgpu/WebGpuRenderer.d.ts +26 -0
  196. package/dist/webgpu/WebGpuRenderer.d.ts.map +1 -0
  197. package/dist/webgpu/WebGpuTypes.d.ts +355 -0
  198. package/dist/webgpu/WebGpuTypes.d.ts.map +1 -0
  199. package/dist/webgpu/blending/WebGpuBlendState.d.ts +30 -0
  200. package/dist/webgpu/blending/WebGpuBlendState.d.ts.map +1 -0
  201. package/dist/webgpu/buffers/WebGpuBuffersFactory.d.ts +20 -0
  202. package/dist/webgpu/buffers/WebGpuBuffersFactory.d.ts.map +1 -0
  203. package/dist/webgpu/buffers/WebGpuIndexBuffer.d.ts +46 -0
  204. package/dist/webgpu/buffers/WebGpuIndexBuffer.d.ts.map +1 -0
  205. package/dist/webgpu/buffers/WebGpuUniformBuffer.d.ts +43 -0
  206. package/dist/webgpu/buffers/WebGpuUniformBuffer.d.ts.map +1 -0
  207. package/dist/webgpu/buffers/WebGpuVertexBuffer.d.ts +49 -0
  208. package/dist/webgpu/buffers/WebGpuVertexBuffer.d.ts.map +1 -0
  209. package/dist/webgpu/primitive/WebGpuPrimitiveState.d.ts +32 -0
  210. package/dist/webgpu/primitive/WebGpuPrimitiveState.d.ts.map +1 -0
  211. package/dist/webgpu/render-pass/WebGpuRenderPass.d.ts +28 -0
  212. package/dist/webgpu/render-pass/WebGpuRenderPass.d.ts.map +1 -0
  213. package/dist/webgpu/render-pipelines/AWebGpuRenderPipeline.d.ts +50 -0
  214. package/dist/webgpu/render-pipelines/AWebGpuRenderPipeline.d.ts.map +1 -0
  215. package/dist/webgpu/render-pipelines/WebGpuMainRenderTargetRenderPipeline.d.ts +34 -0
  216. package/dist/webgpu/render-pipelines/WebGpuMainRenderTargetRenderPipeline.d.ts.map +1 -0
  217. package/dist/webgpu/render-pipelines/WebGpuRenderPipelineFactory.d.ts +26 -0
  218. package/dist/webgpu/render-pipelines/WebGpuRenderPipelineFactory.d.ts.map +1 -0
  219. package/dist/webgpu/render-pipelines/material/AWebGpuMeshRenderPipeline.d.ts +72 -0
  220. package/dist/webgpu/render-pipelines/material/AWebGpuMeshRenderPipeline.d.ts.map +1 -0
  221. package/dist/webgpu/render-pipelines/material/WebGpuUnlitRenderPipeline.d.ts +40 -0
  222. package/dist/webgpu/render-pipelines/material/WebGpuUnlitRenderPipeline.d.ts.map +1 -0
  223. package/dist/webgpu/sampler/WebGpuSampler.d.ts +39 -0
  224. package/dist/webgpu/sampler/WebGpuSampler.d.ts.map +1 -0
  225. package/dist/webgpu/shader/WebGpuShaderModule.d.ts +29 -0
  226. package/dist/webgpu/shader/WebGpuShaderModule.d.ts.map +1 -0
  227. package/dist/webgpu/shader/WebGpuShaderModuleLoader.d.ts +21 -0
  228. package/dist/webgpu/shader/WebGpuShaderModuleLoader.d.ts.map +1 -0
  229. package/dist/webgpu/shader/WgslShaderContent.d.ts +9 -0
  230. package/dist/webgpu/shader/WgslShaderContent.d.ts.map +1 -0
  231. package/dist/webgpu/swap-chain/WebGpuSwapChain.d.ts +41 -0
  232. package/dist/webgpu/swap-chain/WebGpuSwapChain.d.ts.map +1 -0
  233. package/dist/webgpu/texture/WebGpuTexture2D.d.ts +47 -0
  234. package/dist/webgpu/texture/WebGpuTexture2D.d.ts.map +1 -0
  235. package/dist/webgpu/texture/WebGpuTextureFactory.d.ts +21 -0
  236. package/dist/webgpu/texture/WebGpuTextureFactory.d.ts.map +1 -0
  237. package/dist/webgpu/texture/WebGpuTextureView.d.ts +25 -0
  238. package/dist/webgpu/texture/WebGpuTextureView.d.ts.map +1 -0
  239. package/dist/webgpu/utilities/WebGpuConverter.d.ts +45 -0
  240. package/dist/webgpu/utilities/WebGpuConverter.d.ts.map +1 -0
  241. package/package.json +4 -4
  242. package/shaders/glsl/forward_blinn_phong_material_fs.glsl +110 -0
  243. package/shaders/glsl/forward_blinn_phong_material_vs.glsl +32 -0
  244. package/shaders/glsl/main_render_target_flip_y_fs.glsl +35 -1
  245. package/shaders/glsl/sprite_fs.glsl +1 -1
  246. package/shaders/glsl/unlit_material_fs.glsl +1 -1
  247. package/shaders/wgsl/forward_blinn_phong_material.wgsl +150 -0
  248. package/shaders/wgsl/inspect_texture_mips.wgsl +51 -0
  249. package/shaders/wgsl/main_frame_buffer.wgsl +35 -0
  250. package/shaders/wgsl/main_render_target_flip_y.wgsl +35 -0
  251. package/shaders/wgsl/sprite.wgsl +40 -0
  252. package/shaders/wgsl/unlit_material.wgsl +49 -0
  253. package/src/Framework.ts +156 -48
  254. package/src/api/IFramework.ts +63 -6
  255. package/src/api/_export.ts +3 -1
  256. package/src/api/camera/CameraFactory.ts +6 -6
  257. package/src/api/camera/ICamera.ts +6 -0
  258. package/src/api/camera/ICameraFactory.ts +5 -10
  259. package/src/api/camera/OrthographicCamera.ts +23 -1
  260. package/src/api/camera/PerspectiveCamera.ts +60 -15
  261. package/src/api/content/ContentManager.ts +78 -16
  262. package/src/api/content/IContentManager.ts +37 -1
  263. package/src/api/content/ShaderModuleContent.ts +9 -0
  264. package/src/api/data/Color.ts +7 -1
  265. package/src/api/geometry/BaseGeometry.ts +23 -0
  266. package/src/api/geometry/GeometryBuilder.ts +14 -2
  267. package/src/api/geometry/IGeometryBuilder.ts +31 -1
  268. package/src/api/geometry/_export-geometry.ts +2 -1
  269. package/src/api/input/InputManager.ts +14 -5
  270. package/src/api/lights/AmbientLight.ts +53 -0
  271. package/src/api/lights/DirectionalLight.ts +60 -0
  272. package/src/api/lights/LightFactory.ts +21 -0
  273. package/src/api/lights/LightId.ts +9 -0
  274. package/src/api/lights/LightsBuffer.ts +94 -0
  275. package/src/api/lights/PointLight.ts +91 -0
  276. package/src/api/lights/_export.ts +5 -0
  277. package/src/api/loaders/ObjGeometryMapper.ts +28 -0
  278. package/src/api/loaders/ObjLoader.ts +126 -0
  279. package/src/api/loaders/_export.ts +3 -1
  280. package/src/api/loaders/obj/ObjParser.ts +301 -0
  281. package/src/api/loaders/obj/ObjTypes.ts +142 -0
  282. package/src/api/loaders/obj/index.ts +5 -0
  283. package/src/api/material/ForwardBlinnPhongMaterial.ts +328 -0
  284. package/src/api/material/ICameraMaterial.ts +22 -0
  285. package/src/api/material/ILightsMaterial.ts +32 -0
  286. package/src/api/material/IMaterial.ts +13 -10
  287. package/src/api/material/IMaterialFactory.ts +19 -2
  288. package/src/api/material/InspectTextureMipsMaterial.ts +65 -26
  289. package/src/api/material/MaterialFactory.ts +12 -0
  290. package/src/api/material/SpriteMaterial.ts +83 -0
  291. package/src/api/material/UnlitMaterial.ts +105 -32
  292. package/src/api/material/_export.ts +5 -1
  293. package/src/api/meshes/IMesh.ts +40 -6
  294. package/src/api/meshes/IMeshFactory.ts +33 -4
  295. package/src/api/meshes/IRenderableMesh.ts +58 -0
  296. package/src/api/meshes/Mesh.ts +50 -43
  297. package/src/api/meshes/MeshFactory.ts +37 -4
  298. package/src/api/meshes/QuadMesh.ts +6 -4
  299. package/src/api/meshes/RenderableMesh.ts +207 -0
  300. package/src/api/meshes/_export.ts +6 -4
  301. package/src/api/rendering/IGraphicsDeviceFeatures.ts +28 -21
  302. package/src/api/rendering/IRenderer.ts +34 -1
  303. package/src/api/rendering/enums.ts +10 -0
  304. package/src/api/rendering/render-pipelines/IForwardBlinnPhongRenderPipeline.ts +66 -0
  305. package/src/api/rendering/render-pipelines/IRenderPipeline.ts +4 -0
  306. package/src/api/rendering/render-pipelines/IRenderPipelineFactory.ts +39 -0
  307. package/src/api/rendering/render-pipelines/_export-render-pipelines.ts +2 -1
  308. package/src/api/rendering/renderer-interface.ts +1 -36
  309. package/src/api/rendering/renderpass/RenderPassDescriptor.ts +10 -14
  310. package/src/api/rendering/swapchain/ISwapChain.ts +1 -3
  311. package/src/api/rendering/texture/TextureFormat.ts +128 -14
  312. package/src/api/rendering/texture/TextureUtilities.ts +225 -10
  313. package/src/api/scene/Scene.ts +297 -0
  314. package/src/api/scene/SceneMesh.ts +61 -0
  315. package/src/api/shader/IShaderModuleLoader.ts +2 -1
  316. package/src/api/sprites/SpriteBatchDrawable.ts +12 -16
  317. package/src/api/sprites/SpriteBatchMesh.ts +22 -3
  318. package/src/api/utilities/AlignUtilities.ts +2 -1
  319. package/src/api/utilities/GeometryUtilities.ts +2 -0
  320. package/src/api/window/WindowManager.ts +23 -3
  321. package/src/core/rendering/ARenderer.ts +24 -15
  322. package/src/core/rendering/vertex-buffer-layout.ts +32 -1
  323. package/src/index.ts +0 -1
  324. package/src/main.ts +2 -4
  325. package/src/webgl/WebGLGraphicsDeviceFeatures.ts +12 -2
  326. package/src/webgl/WebGlGpuInfo.ts +1 -1
  327. package/src/webgl/WebGlGraphicsDevice.ts +0 -1
  328. package/src/webgl/WebGlRenderer.ts +2 -5
  329. package/src/webgl/lights/WebGlAmbientLightFactory.ts +35 -0
  330. package/src/webgl/lights/WebGlLightsBuffer.ts +225 -0
  331. package/src/webgl/render-pipelines/AWebGlRenderPipeline.ts +7 -1
  332. package/src/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.ts +21 -1
  333. package/src/webgl/render-pipelines/WebGlRenderPipelineFactory.ts +24 -2
  334. package/src/webgl/render-pipelines/inspect/WebGlInspectTextureMipsRenderPipeline.ts +16 -6
  335. package/src/webgl/render-pipelines/material/WebGlBlinnPhongRenderPipeline.ts +300 -0
  336. package/src/webgl/render-pipelines/material/WebGlUnlitRenderPipeline.ts +16 -6
  337. package/src/webgl/render-pipelines/sprite/WebGlSpriteRenderPipeline.ts +11 -7
  338. package/src/webgl/shader/WebGlShaderModule.ts +11 -4
  339. package/src/webgl/shader/WebGlShaderModuleLoader.ts +29 -10
  340. package/src/webgl/swap-chain/WebGlSwapChain.ts +7 -6
  341. package/src/webgl/texture/WebGlTexture2D.ts +19 -5
  342. package/src/webgl/texture/WebGlTextureFactory.ts +49 -7
  343. package/src/webgl/utilities/WebGlConstants.ts +136 -0
  344. package/src/webgl/utilities/WebGlConverter.ts +91 -22
  345. package/src/webgl/utilities/WebGlErrorUtilities.ts +15 -0
  346. package/src/webgl/utilities/WebGlTextureUtilities.ts +5 -2
  347. package/src/webgl/utilities/WebGlUtilities.ts +4 -0
  348. package/src/webgl/utilities/webgl-filter-anisotropic-utilities.ts +9 -6
  349. package/src/webgpu/WebGpuGpuInfo.ts +61 -0
  350. package/src/webgpu/WebGpuGraphicsDevice.ts +199 -0
  351. package/src/webgpu/WebGpuGraphicsDeviceFeatures.ts +41 -0
  352. package/src/webgpu/WebGpuRenderer.ts +49 -0
  353. package/src/webgpu/WebGpuTypes.ts +288 -0
  354. package/src/webgpu/blending/WebGpuBlendState.ts +53 -0
  355. package/src/webgpu/buffers/WebGpuBuffersFactory.ts +46 -0
  356. package/src/webgpu/buffers/WebGpuIndexBuffer.ts +118 -0
  357. package/src/webgpu/buffers/WebGpuUniformBuffer.ts +102 -0
  358. package/src/webgpu/buffers/WebGpuVertexBuffer.ts +119 -0
  359. package/src/webgpu/primitive/WebGpuPrimitiveState.ts +52 -0
  360. package/src/webgpu/render-pass/WebGpuRenderPass.ts +131 -0
  361. package/src/webgpu/render-pipelines/AWebGpuRenderPipeline.ts +123 -0
  362. package/src/webgpu/render-pipelines/WebGpuMainRenderTargetRenderPipeline.ts +119 -0
  363. package/src/webgpu/render-pipelines/WebGpuRenderPipelineFactory.ts +66 -0
  364. package/src/webgpu/render-pipelines/material/AWebGpuMeshRenderPipeline.ts +249 -0
  365. package/src/webgpu/render-pipelines/material/WebGpuUnlitRenderPipeline.ts +101 -0
  366. package/src/webgpu/sampler/WebGpuSampler.ts +84 -0
  367. package/src/webgpu/shader/WebGpuShaderModule.ts +65 -0
  368. package/src/webgpu/shader/WebGpuShaderModuleLoader.ts +38 -0
  369. package/src/webgpu/shader/WgslShaderContent.ts +20 -0
  370. package/src/webgpu/swap-chain/WebGpuSwapChain.ts +93 -0
  371. package/src/webgpu/texture/WebGpuTexture2D.ts +197 -0
  372. package/src/webgpu/texture/WebGpuTextureFactory.ts +118 -0
  373. package/src/webgpu/texture/WebGpuTextureView.ts +43 -0
  374. package/src/webgpu/utilities/WebGpuConverter.ts +299 -0
  375. package/src/wgsl-raw.d.ts +4 -0
  376. package/dist/api/FrameworkConfiguration.d.ts +0 -23
  377. package/dist/api/FrameworkConfiguration.d.ts.map +0 -1
  378. package/dist/api/IFrameworkConfiguration.d.ts +0 -25
  379. package/dist/api/IFrameworkConfiguration.d.ts.map +0 -1
  380. package/dist/api/shader/shader-loader.d.ts.map +0 -1
  381. package/src/api/FrameworkConfiguration.ts +0 -29
  382. package/src/api/IFrameworkConfiguration.ts +0 -30
  383. /package/src/api/shader/{shader-loader.ts → ShaderLoader.ts} +0 -0
@@ -0,0 +1,15 @@
1
+ export class WebGlErrorUtilities {
2
+
3
+ private readonly _map: Record<number, string> = {
4
+ 1282: "INVALID_OPERATION"
5
+ }
6
+
7
+ /**
8
+ * Maps the WebGL2 error code to string.
9
+ * @param error The error code.
10
+ * @return The string of error code.
11
+ */
12
+ public errorToStr(error: number) : string {
13
+ return this._map[error] ?? error.toString();
14
+ }
15
+ }
@@ -1,6 +1,7 @@
1
1
  import {WebGlConverter} from "./WebGlConverter.ts";
2
2
  import {AlignUtilities, TextureFormat} from "../../api/index.ts";
3
3
  import {vec2} from "gl-matrix";
4
+ import {WebGlUtilities} from "./WebGlUtilities.ts";
4
5
 
5
6
  /**
6
7
  * The utilities for working with WebGL textures.
@@ -120,8 +121,8 @@ export class WebGlTextureUtilities {
120
121
  gl.bindTexture(gl.TEXTURE_2D, texture);
121
122
 
122
123
  const internalFormat = WebGlConverter.convertInternalFormat(gl, textureFormat);
123
-
124
124
  const useTexStorage = baseWidth % blockSize[0] == 0 && baseHeight % blockSize[1] == 0;
125
+
125
126
  if (useTexStorage) {
126
127
  gl.texStorage2D(gl.TEXTURE_2D, mipLevels, internalFormat, baseWidth, baseHeight);
127
128
  }
@@ -163,7 +164,9 @@ export class WebGlTextureUtilities {
163
164
 
164
165
  const error = gl.getError();
165
166
  if (error != gl.NO_ERROR) {
166
- throw new Error("WebGlTextureUtilities error " + error.toString());
167
+ const errorStr ="WebGlTextureUtilities error " + WebGlUtilities.error.errorToStr(error);
168
+ console.error(errorStr);
169
+ throw new Error(errorStr);
167
170
  }
168
171
 
169
172
  return texture;
@@ -8,6 +8,7 @@ import { WebGLRenderbufferUtilities } from "./webgl-renderbuffer-utilities";
8
8
  import { WebGlSamplerUtilities } from "./WebGlSamplerUtilities.ts";
9
9
  import { WebGlShaderUtilities } from "./WebGlShaderUtilities.ts";
10
10
  import { WebGlTextureUtilities } from "./WebGlTextureUtilities.ts";
11
+ import {WebGlErrorUtilities} from "./WebGlErrorUtilities.ts";
11
12
 
12
13
  /**
13
14
  * The utility class for WebGL operations.
@@ -68,4 +69,7 @@ export class WebGlUtilities {
68
69
  * The WebGL program utilities.
69
70
  */
70
71
  public static readonly program = new WebGLProgramUtilities();
72
+
73
+ /** The WebGL error utilities. Helper class for working with errors. */
74
+ public static readonly error = new WebGlErrorUtilities();
71
75
  }
@@ -7,18 +7,17 @@ export class WebGLFilterAnisotropicUtilities {
7
7
  */
8
8
  private MAX_ANISOTROPY_EXT: string = "EXT_texture_filter_anisotropic";
9
9
 
10
- private _extension: any;
11
-
12
10
  /**
13
11
  * Gets the max anisotropy.
14
12
  * @param gl The WebGL2 rendering context.
15
13
  * @returns The maximum supported level of anisotropic filtering. `0` if not supported.
16
14
  */
17
15
  public getMaxAnisotropy(gl: WebGL2RenderingContext): number {
18
- this._extension = gl.getExtension(this.MAX_ANISOTROPY_EXT);
16
+ // Looked up per context: this utility is a shared static, and an extension object belongs to one context.
17
+ const extension = gl.getExtension(this.MAX_ANISOTROPY_EXT);
19
18
 
20
- if (this._extension) {
21
- return gl.getParameter(this._extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT);
19
+ if (extension) {
20
+ return gl.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT);
22
21
  }
23
22
 
24
23
  return 0;
@@ -31,7 +30,11 @@ export class WebGLFilterAnisotropicUtilities {
31
30
  * @param anisotropy The level of anisotropic filtering
32
31
  */
33
32
  public setAnisotropy(gl: WebGL2RenderingContext, texture: WebGLTexture, anisotropy: number) {
33
+ const extension = gl.getExtension(this.MAX_ANISOTROPY_EXT);
34
+ if (!extension) {
35
+ return;
36
+ }
34
37
  gl.bindTexture(gl.TEXTURE_2D, texture);
35
- gl.texParameterf(gl.TEXTURE_2D, this._extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT, anisotropy);
38
+ gl.texParameterf(gl.TEXTURE_2D, extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT, anisotropy);
36
39
  }
37
40
  }
@@ -0,0 +1,61 @@
1
+ import {type IGPUInfo, RenderingBackend, TextureFormat} from "../api/index.ts";
2
+ import type {GpuAdapter} from "./WebGpuTypes.ts";
3
+ import type {WebGpuGraphicsDeviceFeatures} from "./WebGpuGraphicsDeviceFeatures.ts";
4
+
5
+ /**
6
+ * The WebGPU GPU info, read from the adapter info.
7
+ * @internal
8
+ */
9
+ export class WebGpuGpuInfo implements IGPUInfo {
10
+
11
+ /**
12
+ * The constructor.
13
+ * @param adapter The adapter.
14
+ * @param features The device features.
15
+ */
16
+ public constructor(adapter: GpuAdapter, features: WebGpuGraphicsDeviceFeatures) {
17
+ const info = adapter.info;
18
+ this.name = info?.description || info?.device || info?.architecture || "Unknown";
19
+ this.vendor = info?.vendor || "Unknown";
20
+ this.apiVersion = "WebGPU";
21
+ this.api = RenderingBackend.WEB_GPU;
22
+ // The native API behind WebGPU (Vulkan, Metal, D3D12) is hidden from the page.
23
+ this.underlyingBackend = RenderingBackend.DEFAULT;
24
+
25
+ // Features are read from the device (only requested features are enabled), so this lists what can be created.
26
+ const formats: TextureFormat[] = [];
27
+ if (features.supportsTextureCompressionASTC) {
28
+ formats.push(TextureFormat.ASTC_4X4_RGBA_UNORM, TextureFormat.ASTC_4X4_RGBA_SRGB);
29
+ }
30
+ if (features.supportsTextureCompressionS3TC) {
31
+ formats.push(TextureFormat.BC1_RGB_UNORM, TextureFormat.BC1_RGB_SRGB,
32
+ TextureFormat.BC3_RGBA_UNORM, TextureFormat.BC3_RGBA_SRGB);
33
+ }
34
+ if (features.supportsTextureCompressionETC2) {
35
+ formats.push(TextureFormat.ETC2_RGB8_UNORM, TextureFormat.ETC2_RGB8_SRGB,
36
+ TextureFormat.ETC2_RGBA8_UNORM, TextureFormat.ETC2_RGBA8_SRGB);
37
+ }
38
+ if (features.supportsTextureCompressionBC) {
39
+ formats.push(TextureFormat.BC7_RGBA_UNORM, TextureFormat.BC7_RGBA_SRGB);
40
+ }
41
+ this.supportedCompressedTextureFormats = formats;
42
+ }
43
+
44
+ /** @inheritDoc */
45
+ public readonly name: string;
46
+
47
+ /** @inheritDoc */
48
+ public readonly vendor: string;
49
+
50
+ /** @inheritDoc */
51
+ public readonly apiVersion: string;
52
+
53
+ /** @inheritDoc */
54
+ public readonly api: RenderingBackend;
55
+
56
+ /** @inheritDoc */
57
+ public readonly underlyingBackend: RenderingBackend;
58
+
59
+ /** @inheritDoc */
60
+ public readonly supportedCompressedTextureFormats: TextureFormat[];
61
+ }
@@ -0,0 +1,199 @@
1
+ import {AGraphicsDevice, type IGraphicsDeviceDescriptor} from "../core/rendering/AGraphicsDevice.ts";
2
+ import type {BlendStateDescriptor} from "../core/rendering/blending/blend-state-descriptor.ts";
3
+ import type {SamplerDescriptor} from "../core/rendering/sampler/sampler-descriptor.ts";
4
+ import {
5
+ type IBlendState,
6
+ type IGPUInfo,
7
+ type IPrimitiveState,
8
+ type IRenderPass,
9
+ type ISampler,
10
+ type ISwapChain,
11
+ type IWindowManager,
12
+ PrimitiveStateDescriptor,
13
+ RenderPassDescriptor,
14
+ SwapChainDescriptor,
15
+ } from "../api/index.ts";
16
+ import {getNavigatorGpu, type GpuAdapter, type GpuDevice, type GpuRenderPassEncoder} from "./WebGpuTypes.ts";
17
+ import {PowerPreferenceType} from "../api/rendering/PowerPreference.ts";
18
+ import {WebGpuGraphicsDeviceFeatures} from "./WebGpuGraphicsDeviceFeatures.ts";
19
+ import {WebGpuGpuInfo} from "./WebGpuGpuInfo.ts";
20
+ import {WebGpuSwapChain} from "./swap-chain/WebGpuSwapChain.ts";
21
+ import {WebGpuSampler} from "./sampler/WebGpuSampler.ts";
22
+ import {WebGpuRenderPass} from "./render-pass/WebGpuRenderPass.ts";
23
+ import {WebGpuBlendState} from "./blending/WebGpuBlendState.ts";
24
+ import {WebGpuPrimitiveState} from "./primitive/WebGpuPrimitiveState.ts";
25
+
26
+ /**
27
+ * The WebGPU graphics device. It requests its own adapter and device in {@link createAsync},
28
+ * so everything after creation is synchronous like WebGL.
29
+ * @internal
30
+ */
31
+ export class WebGpuGraphicsDevice extends AGraphicsDevice {
32
+
33
+ private readonly _windowManager: IWindowManager;
34
+ private readonly _adapter: GpuAdapter;
35
+ private readonly _device: GpuDevice;
36
+ private _features: WebGpuGraphicsDeviceFeatures = null!;
37
+ private _gpuInfo: WebGpuGpuInfo = null!;
38
+ private _swapChain: WebGpuSwapChain | null = null;
39
+
40
+ /**
41
+ * The render pass encoder of the pass that is currently open, or null between passes.
42
+ * Set by {@link WebGpuRenderPass.beginPass}, like `currentRenderPassEncoder` in the C# device.
43
+ */
44
+ public currentRenderPassEncoder: GpuRenderPassEncoder | null = null;
45
+
46
+ /**
47
+ * Creates the graphics device: requests the WebGPU adapter and device.
48
+ * Throws when WebGPU is unavailable or no adapter is found.
49
+ * @param windowManager The window manager.
50
+ * @param descriptor The device descriptor.
51
+ * @returns The created graphics device.
52
+ */
53
+ public static async createAsync(windowManager: IWindowManager, descriptor: IGraphicsDeviceDescriptor): Promise<WebGpuGraphicsDevice> {
54
+ const gpu = getNavigatorGpu();
55
+ if (!gpu) {
56
+ throw new Error("WebGPU is not supported: navigator.gpu is missing.");
57
+ }
58
+ const preference = descriptor.powerPreference;
59
+ const adapter = await gpu.requestAdapter(
60
+ preference && preference !== PowerPreferenceType.DEFAULT
61
+ ? {powerPreference: preference as unknown as "low-power" | "high-performance"}
62
+ : undefined);
63
+ if (!adapter) {
64
+ throw new Error("WebGPU is not supported: no adapter was found.");
65
+ }
66
+ // WebGPU only enables the features that are requested, so ask for every compression family the adapter has.
67
+ const requiredFeatures = ["texture-compression-bc", "texture-compression-etc2", "texture-compression-astc"]
68
+ .filter(feature => adapter.features.has(feature));
69
+ const device = await adapter.requestDevice({label: "RisFramework WebGPU device", requiredFeatures});
70
+ return new WebGpuGraphicsDevice(windowManager, descriptor, adapter, device);
71
+ }
72
+
73
+ /**
74
+ * The constructor. Use {@link createAsync} to create the device.
75
+ * @param windowManager The window manager.
76
+ * @param descriptor The device descriptor.
77
+ * @param adapter The WebGPU adapter.
78
+ * @param device The WebGPU device.
79
+ */
80
+ private constructor(windowManager: IWindowManager, descriptor: IGraphicsDeviceDescriptor, adapter: GpuAdapter, device: GpuDevice) {
81
+ super(descriptor);
82
+ this._windowManager = windowManager;
83
+ this._adapter = adapter;
84
+ this._device = device;
85
+ }
86
+
87
+ /** The WebGPU device. */
88
+ public get device(): GpuDevice {
89
+ return this._device;
90
+ }
91
+
92
+ /** The WebGPU adapter. */
93
+ public get adapter(): GpuAdapter {
94
+ return this._adapter;
95
+ }
96
+
97
+ /** Whether the canvas should keep its alpha channel. */
98
+ public get alpha(): boolean {
99
+ return this._descriptor.alpha;
100
+ }
101
+
102
+ /** The swap chain, once created. */
103
+ public get swapChain(): WebGpuSwapChain | null {
104
+ return this._swapChain;
105
+ }
106
+
107
+ /** The window manager. */
108
+ public get windowManager(): IWindowManager {
109
+ return this._windowManager;
110
+ }
111
+
112
+ /** @inheritDoc */
113
+ public get features(): WebGpuGraphicsDeviceFeatures {
114
+ return this._features;
115
+ }
116
+
117
+ /** @inheritDoc */
118
+ public get gpuInfo(): IGPUInfo {
119
+ return this._gpuInfo;
120
+ }
121
+
122
+ /** The current render pass encoder. Throws when no pass is open. */
123
+ public get renderPassEncoder(): GpuRenderPassEncoder {
124
+ if (!this.currentRenderPassEncoder) {
125
+ throw new Error("WebGpuGraphicsDevice: no render pass is open. Draw calls must happen between beginRenderPass and endRenderPass.");
126
+ }
127
+ return this.currentRenderPassEncoder;
128
+ }
129
+
130
+ /** @inheritDoc */
131
+ public initialize(): void {
132
+ this._features = new WebGpuGraphicsDeviceFeatures(this._device.features);
133
+ this._gpuInfo = new WebGpuGpuInfo(this._adapter, this._features);
134
+ this.setupDebugCallback();
135
+ super.initialize();
136
+ }
137
+
138
+ /** @inheritDoc */
139
+ public createSwapChain(canvas: HTMLCanvasElement, descriptor: SwapChainDescriptor): ISwapChain {
140
+ this._swapChain?.dispose();
141
+ this._swapChain = new WebGpuSwapChain(canvas, this, descriptor);
142
+ return this._swapChain;
143
+ }
144
+
145
+ /** @inheritDoc */
146
+ public createSampler(descriptor?: SamplerDescriptor): ISampler {
147
+ return new WebGpuSampler(this, descriptor);
148
+ }
149
+
150
+ /** @inheritDoc */
151
+ public createRenderPass(descriptor: RenderPassDescriptor): IRenderPass {
152
+ return new WebGpuRenderPass(this, descriptor);
153
+ }
154
+
155
+ /** @inheritDoc */
156
+ public createBlendState(descriptor: BlendStateDescriptor): IBlendState {
157
+ return new WebGpuBlendState(descriptor);
158
+ }
159
+
160
+ /** @inheritDoc */
161
+ public createPrimitiveState(descriptor?: PrimitiveStateDescriptor): IPrimitiveState {
162
+ return new WebGpuPrimitiveState(descriptor ?? new PrimitiveStateDescriptor());
163
+ }
164
+
165
+ /** @inheritDoc */
166
+ public setupDebugCallback(): void {
167
+ this._device.addEventListener("uncapturederror", event => {
168
+ console.error(`WebGPU error: ${event.error.message}`);
169
+ });
170
+ this._device.lost.then(info => {
171
+ if (info.reason !== "destroyed") {
172
+ console.error(`WebGPU device lost (${info.reason}): ${info.message}`);
173
+ }
174
+ }).catch(() => { /* ignore */ });
175
+ }
176
+
177
+ /** @inheritDoc */
178
+ public frameEnd(): void {
179
+ // Command buffers are submitted at the end of every render pass, so nothing is pending here.
180
+ }
181
+
182
+ /** @inheritDoc */
183
+ public pushDebugGroup(groupName: string): void {
184
+ this.currentRenderPassEncoder?.pushDebugGroup(groupName);
185
+ }
186
+
187
+ /** @inheritDoc */
188
+ public popDebugGroup(): void {
189
+ this.currentRenderPassEncoder?.popDebugGroup();
190
+ }
191
+
192
+ /** @inheritDoc */
193
+ public dispose(): void {
194
+ super.dispose();
195
+ this._swapChain?.dispose();
196
+ this._swapChain = null;
197
+ this._device.destroy();
198
+ }
199
+ }
@@ -0,0 +1,41 @@
1
+ import type {IGraphicsDeviceFeatures} from "../api/index.ts";
2
+ import type {GpuSupportedFeatures} from "./WebGpuTypes.ts";
3
+
4
+ /**
5
+ * The WebGPU graphics device features, read from the device's enabled features.
6
+ * @internal
7
+ */
8
+ export class WebGpuGraphicsDeviceFeatures implements IGraphicsDeviceFeatures {
9
+
10
+ /**
11
+ * The constructor.
12
+ * @param features The device's enabled features.
13
+ */
14
+ public constructor(features: GpuSupportedFeatures) {
15
+ this.supportsTextureCompressionBC = features.has("texture-compression-bc");
16
+ // S3TC (BC1-BC3) is part of the WebGPU BC feature.
17
+ this.supportsTextureCompressionS3TC = this.supportsTextureCompressionBC;
18
+ this.supportsTextureCompressionS3TCSrgb = this.supportsTextureCompressionBC;
19
+ this.supportsTextureCompressionETC2 = features.has("texture-compression-etc2");
20
+ this.supportsTextureCompressionASTC = features.has("texture-compression-astc");
21
+ this.supportsTextureCompressionPVRTC = false;
22
+ }
23
+
24
+ /** @inheritDoc */
25
+ public readonly supportsTextureCompressionS3TC: boolean;
26
+
27
+ /** @inheritDoc */
28
+ public readonly supportsTextureCompressionS3TCSrgb: boolean;
29
+
30
+ /** @inheritDoc */
31
+ public readonly supportsTextureCompressionBC: boolean;
32
+
33
+ /** @inheritDoc */
34
+ public readonly supportsTextureCompressionETC2: boolean;
35
+
36
+ /** @inheritDoc */
37
+ public readonly supportsTextureCompressionASTC: boolean;
38
+
39
+ /** @inheritDoc */
40
+ public readonly supportsTextureCompressionPVRTC: boolean;
41
+ }
@@ -0,0 +1,49 @@
1
+ import {ARenderer} from "../core/rendering/ARenderer.ts";
2
+ import {type IFramework, type IGraphicsDevice, type IRendererConfiguration, RenderingBackend} from "../api/index.ts";
3
+ import {WebGpuGraphicsDevice} from "./WebGpuGraphicsDevice.ts";
4
+ import {getNavigatorGpu} from "./WebGpuTypes.ts";
5
+
6
+ /**
7
+ * The WebGPU renderer. WebGPU hands out the adapter and device asynchronously, so call
8
+ * {@link acquireDeviceAsync} (done by `Framework.initializeAsync()`) before {@link initialize}.
9
+ * @internal
10
+ */
11
+ export class WebGpuRenderer extends ARenderer {
12
+
13
+ private _createdDevice: WebGpuGraphicsDevice | null = null;
14
+
15
+ /**
16
+ * The constructor.
17
+ * @param framework The framework.
18
+ * @param renderConfiguration The renderer configuration.
19
+ */
20
+ public constructor(framework: IFramework, renderConfiguration: IRendererConfiguration) {
21
+ super(framework, renderConfiguration);
22
+ this.backend = RenderingBackend.WEB_GPU;
23
+ }
24
+
25
+ /** Whether the browser exposes `navigator.gpu`. */
26
+ public static isSupported(): boolean {
27
+ return getNavigatorGpu() !== undefined;
28
+ }
29
+
30
+ /**
31
+ * Creates the graphics device, which requests its own adapter and device.
32
+ * Throws when WebGPU is unavailable or no adapter is found.
33
+ */
34
+ public async acquireDeviceAsync(): Promise<void> {
35
+ this._createdDevice = await WebGpuGraphicsDevice.createAsync(this._framework.windowManager, {
36
+ samplerFilteringPreset: this._renderConfiguration.textureFiltering,
37
+ alpha: this._renderConfiguration.alpha,
38
+ powerPreference: this._renderConfiguration.powerPreference,
39
+ });
40
+ }
41
+
42
+ /** @inheritDoc */
43
+ protected createGraphicsDevice(): IGraphicsDevice {
44
+ if (!this._createdDevice) {
45
+ throw new Error("WebGpuRenderer: the device is not created. Use Framework.initializeAsync() for WebGPU.");
46
+ }
47
+ return this._createdDevice;
48
+ }
49
+ }