ris-framework 0.2.0-dev.11 → 0.2.0-dev.13
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.
- package/CHANGELOG.md +21 -29
- package/README.md +99 -150
- package/dist/Framework.d.ts +26 -8
- package/dist/Framework.d.ts.map +1 -1
- package/dist/api/IFramework.d.ts +43 -0
- package/dist/api/IFramework.d.ts.map +1 -1
- package/dist/api/_export.d.ts +1 -1
- package/dist/api/_export.d.ts.map +1 -1
- package/dist/api/content/ContentManager.d.ts +5 -57
- package/dist/api/content/ContentManager.d.ts.map +1 -1
- package/dist/api/content/IContentManager.d.ts +24 -21
- package/dist/api/content/IContentManager.d.ts.map +1 -1
- package/dist/api/lights/LightsBuffer.d.ts +13 -6
- package/dist/api/lights/LightsBuffer.d.ts.map +1 -1
- package/dist/api/loaders/ObjGeometryMapper.d.ts +2 -2
- package/dist/api/loaders/ObjLoader.d.ts +61 -0
- package/dist/api/loaders/ObjLoader.d.ts.map +1 -0
- package/dist/api/loaders/_export.d.ts +1 -0
- package/dist/api/loaders/_export.d.ts.map +1 -1
- package/dist/api/loaders/obj/{ObjLoader.d.ts → ObjParser.d.ts} +20 -5
- package/dist/api/loaders/obj/ObjParser.d.ts.map +1 -0
- package/dist/api/loaders/obj/ObjTypes.d.ts +17 -1
- package/dist/api/loaders/obj/ObjTypes.d.ts.map +1 -1
- package/dist/api/loaders/obj/index.d.ts +1 -1
- package/dist/api/material/ForwardBlinnPhongMaterial.d.ts +22 -11
- package/dist/api/material/ForwardBlinnPhongMaterial.d.ts.map +1 -1
- package/dist/api/material/ICameraMaterial.d.ts +18 -0
- package/dist/api/material/ICameraMaterial.d.ts.map +1 -0
- package/dist/api/material/ILightsMaterial.d.ts +26 -0
- package/dist/api/material/ILightsMaterial.d.ts.map +1 -0
- package/dist/api/material/IMaterial.d.ts +2 -8
- package/dist/api/material/IMaterial.d.ts.map +1 -1
- package/dist/api/material/InspectTextureMipsMaterial.d.ts +2 -2
- package/dist/api/material/InspectTextureMipsMaterial.d.ts.map +1 -1
- package/dist/api/material/SpriteMaterial.d.ts +2 -2
- package/dist/api/material/SpriteMaterial.d.ts.map +1 -1
- package/dist/api/material/UnlitMaterial.d.ts +4 -3
- package/dist/api/material/UnlitMaterial.d.ts.map +1 -1
- package/dist/api/material/_export.d.ts +2 -0
- package/dist/api/material/_export.d.ts.map +1 -1
- package/dist/api/meshes/IMesh.d.ts +29 -34
- package/dist/api/meshes/IMesh.d.ts.map +1 -1
- package/dist/api/meshes/IMeshFactory.d.ts +13 -8
- package/dist/api/meshes/IMeshFactory.d.ts.map +1 -1
- package/dist/api/meshes/IRenderableMesh.d.ts +47 -0
- package/dist/api/meshes/IRenderableMesh.d.ts.map +1 -0
- package/dist/api/meshes/Mesh.d.ts +11 -57
- package/dist/api/meshes/Mesh.d.ts.map +1 -1
- package/dist/api/meshes/MeshFactory.d.ts +6 -3
- package/dist/api/meshes/MeshFactory.d.ts.map +1 -1
- package/dist/api/meshes/QuadMesh.d.ts +3 -5
- package/dist/api/meshes/QuadMesh.d.ts.map +1 -1
- package/dist/api/meshes/RenderableMesh.d.ts +95 -0
- package/dist/api/meshes/RenderableMesh.d.ts.map +1 -0
- package/dist/api/meshes/_export.d.ts +2 -1
- package/dist/api/meshes/_export.d.ts.map +1 -1
- package/dist/api/rendering/IGraphicsDeviceFeatures.d.ts +8 -2
- package/dist/api/rendering/IGraphicsDeviceFeatures.d.ts.map +1 -1
- package/dist/api/rendering/IRenderer.d.ts +28 -1
- package/dist/api/rendering/IRenderer.d.ts.map +1 -1
- package/dist/api/rendering/enums.d.ts +7 -0
- package/dist/api/rendering/enums.d.ts.map +1 -1
- package/dist/api/rendering/renderer-interface.d.ts +1 -31
- package/dist/api/rendering/renderer-interface.d.ts.map +1 -1
- package/dist/api/rendering/renderpass/RenderPassDescriptor.d.ts +2 -6
- package/dist/api/rendering/renderpass/RenderPassDescriptor.d.ts.map +1 -1
- package/dist/api/rendering/swapchain/ISwapChain.d.ts +1 -3
- package/dist/api/rendering/swapchain/ISwapChain.d.ts.map +1 -1
- package/dist/api/rendering/texture/TextureFormat.d.ts +88 -14
- package/dist/api/rendering/texture/TextureFormat.d.ts.map +1 -1
- package/dist/api/rendering/texture/TextureUtilities.d.ts +23 -0
- package/dist/api/rendering/texture/TextureUtilities.d.ts.map +1 -1
- package/dist/api/scene/Scene.d.ts +30 -21
- package/dist/api/scene/Scene.d.ts.map +1 -1
- package/dist/api/scene/SceneMesh.d.ts +27 -0
- package/dist/api/scene/SceneMesh.d.ts.map +1 -0
- package/dist/api/utilities/AlignUtilities.d.ts.map +1 -1
- package/dist/api/window/WindowManager.d.ts.map +1 -1
- package/dist/core/rendering/ARenderer.d.ts +5 -5
- package/dist/core/rendering/ARenderer.d.ts.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4006 -1355
- package/dist/webgl/WebGLGraphicsDeviceFeatures.d.ts +4 -0
- package/dist/webgl/WebGLGraphicsDeviceFeatures.d.ts.map +1 -1
- package/dist/webgl/WebGlRenderer.d.ts +1 -3
- package/dist/webgl/WebGlRenderer.d.ts.map +1 -1
- package/dist/webgl/lights/WebGlLightsBuffer.d.ts +8 -4
- package/dist/webgl/lights/WebGlLightsBuffer.d.ts.map +1 -1
- package/dist/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.d.ts +2 -0
- package/dist/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.d.ts.map +1 -1
- package/dist/webgl/swap-chain/WebGlSwapChain.d.ts +3 -2
- package/dist/webgl/swap-chain/WebGlSwapChain.d.ts.map +1 -1
- package/dist/webgl/texture/WebGlTextureFactory.d.ts +7 -0
- package/dist/webgl/texture/WebGlTextureFactory.d.ts.map +1 -1
- package/dist/webgl/utilities/WebGlConstants.d.ts +91 -0
- package/dist/webgl/utilities/WebGlConstants.d.ts.map +1 -0
- package/dist/webgl/utilities/WebGlConverter.d.ts +0 -7
- package/dist/webgl/utilities/WebGlConverter.d.ts.map +1 -1
- package/dist/webgl/utilities/WebGlErrorUtilities.d.ts +10 -0
- package/dist/webgl/utilities/WebGlErrorUtilities.d.ts.map +1 -0
- package/dist/webgl/utilities/WebGlTextureUtilities.d.ts.map +1 -1
- package/dist/webgl/utilities/WebGlUtilities.d.ts +3 -0
- package/dist/webgl/utilities/WebGlUtilities.d.ts.map +1 -1
- package/dist/webgpu/WebGpuGpuInfo.d.ts +28 -0
- package/dist/webgpu/WebGpuGpuInfo.d.ts.map +1 -0
- package/dist/webgpu/WebGpuGraphicsDevice.d.ts +80 -0
- package/dist/webgpu/WebGpuGraphicsDevice.d.ts.map +1 -0
- package/dist/webgpu/WebGpuGraphicsDeviceFeatures.d.ts +26 -0
- package/dist/webgpu/WebGpuGraphicsDeviceFeatures.d.ts.map +1 -0
- package/dist/webgpu/WebGpuRenderer.d.ts +26 -0
- package/dist/webgpu/WebGpuRenderer.d.ts.map +1 -0
- package/dist/webgpu/WebGpuTypes.d.ts +355 -0
- package/dist/webgpu/WebGpuTypes.d.ts.map +1 -0
- package/dist/webgpu/blending/WebGpuBlendState.d.ts +30 -0
- package/dist/webgpu/blending/WebGpuBlendState.d.ts.map +1 -0
- package/dist/webgpu/buffers/WebGpuBuffersFactory.d.ts +20 -0
- package/dist/webgpu/buffers/WebGpuBuffersFactory.d.ts.map +1 -0
- package/dist/webgpu/buffers/WebGpuIndexBuffer.d.ts +46 -0
- package/dist/webgpu/buffers/WebGpuIndexBuffer.d.ts.map +1 -0
- package/dist/webgpu/buffers/WebGpuUniformBuffer.d.ts +43 -0
- package/dist/webgpu/buffers/WebGpuUniformBuffer.d.ts.map +1 -0
- package/dist/webgpu/buffers/WebGpuVertexBuffer.d.ts +49 -0
- package/dist/webgpu/buffers/WebGpuVertexBuffer.d.ts.map +1 -0
- package/dist/webgpu/primitive/WebGpuPrimitiveState.d.ts +32 -0
- package/dist/webgpu/primitive/WebGpuPrimitiveState.d.ts.map +1 -0
- package/dist/webgpu/render-pass/WebGpuRenderPass.d.ts +28 -0
- package/dist/webgpu/render-pass/WebGpuRenderPass.d.ts.map +1 -0
- package/dist/webgpu/render-pipelines/AWebGpuRenderPipeline.d.ts +50 -0
- package/dist/webgpu/render-pipelines/AWebGpuRenderPipeline.d.ts.map +1 -0
- package/dist/webgpu/render-pipelines/WebGpuMainRenderTargetRenderPipeline.d.ts +34 -0
- package/dist/webgpu/render-pipelines/WebGpuMainRenderTargetRenderPipeline.d.ts.map +1 -0
- package/dist/webgpu/render-pipelines/WebGpuRenderPipelineFactory.d.ts +26 -0
- package/dist/webgpu/render-pipelines/WebGpuRenderPipelineFactory.d.ts.map +1 -0
- package/dist/webgpu/render-pipelines/material/AWebGpuMeshRenderPipeline.d.ts +72 -0
- package/dist/webgpu/render-pipelines/material/AWebGpuMeshRenderPipeline.d.ts.map +1 -0
- package/dist/webgpu/render-pipelines/material/WebGpuUnlitRenderPipeline.d.ts +40 -0
- package/dist/webgpu/render-pipelines/material/WebGpuUnlitRenderPipeline.d.ts.map +1 -0
- package/dist/webgpu/sampler/WebGpuSampler.d.ts +39 -0
- package/dist/webgpu/sampler/WebGpuSampler.d.ts.map +1 -0
- package/dist/webgpu/shader/WebGpuShaderModule.d.ts +29 -0
- package/dist/webgpu/shader/WebGpuShaderModule.d.ts.map +1 -0
- package/dist/webgpu/shader/WebGpuShaderModuleLoader.d.ts +21 -0
- package/dist/webgpu/shader/WebGpuShaderModuleLoader.d.ts.map +1 -0
- package/dist/webgpu/shader/WgslShaderContent.d.ts +9 -0
- package/dist/webgpu/shader/WgslShaderContent.d.ts.map +1 -0
- package/dist/webgpu/swap-chain/WebGpuSwapChain.d.ts +41 -0
- package/dist/webgpu/swap-chain/WebGpuSwapChain.d.ts.map +1 -0
- package/dist/webgpu/texture/WebGpuTexture2D.d.ts +47 -0
- package/dist/webgpu/texture/WebGpuTexture2D.d.ts.map +1 -0
- package/dist/webgpu/texture/WebGpuTextureFactory.d.ts +21 -0
- package/dist/webgpu/texture/WebGpuTextureFactory.d.ts.map +1 -0
- package/dist/webgpu/texture/WebGpuTextureView.d.ts +25 -0
- package/dist/webgpu/texture/WebGpuTextureView.d.ts.map +1 -0
- package/dist/webgpu/utilities/WebGpuConverter.d.ts +45 -0
- package/dist/webgpu/utilities/WebGpuConverter.d.ts.map +1 -0
- package/package.json +2 -2
- package/shaders/glsl/main_render_target_flip_y_fs.glsl +35 -1
- package/shaders/wgsl/forward_blinn_phong_material.wgsl +150 -0
- package/shaders/wgsl/inspect_texture_mips.wgsl +51 -0
- package/shaders/wgsl/main_frame_buffer.wgsl +35 -0
- package/shaders/wgsl/main_render_target_flip_y.wgsl +35 -0
- package/shaders/wgsl/sprite.wgsl +40 -0
- package/shaders/wgsl/unlit_material.wgsl +49 -0
- package/src/Framework.ts +121 -37
- package/src/api/IFramework.ts +55 -0
- package/src/api/_export.ts +1 -1
- package/src/api/content/ContentManager.ts +46 -180
- package/src/api/content/IContentManager.ts +25 -21
- package/src/api/lights/LightsBuffer.ts +13 -6
- package/src/api/loaders/ObjGeometryMapper.ts +2 -2
- package/src/api/loaders/ObjLoader.ts +126 -0
- package/src/api/loaders/_export.ts +1 -0
- package/src/api/loaders/obj/{ObjLoader.ts → ObjParser.ts} +35 -4
- package/src/api/loaders/obj/ObjTypes.ts +19 -1
- package/src/api/loaders/obj/index.ts +1 -1
- package/src/api/material/ForwardBlinnPhongMaterial.ts +48 -22
- package/src/api/material/ICameraMaterial.ts +22 -0
- package/src/api/material/ILightsMaterial.ts +32 -0
- package/src/api/material/IMaterial.ts +2 -9
- package/src/api/material/InspectTextureMipsMaterial.ts +2 -2
- package/src/api/material/SpriteMaterial.ts +2 -2
- package/src/api/material/UnlitMaterial.ts +4 -3
- package/src/api/material/_export.ts +2 -0
- package/src/api/meshes/IMesh.ts +32 -37
- package/src/api/meshes/IMeshFactory.ts +14 -8
- package/src/api/meshes/IRenderableMesh.ts +58 -0
- package/src/api/meshes/Mesh.ts +17 -132
- package/src/api/meshes/MeshFactory.ts +14 -5
- package/src/api/meshes/QuadMesh.ts +4 -6
- package/src/api/meshes/RenderableMesh.ts +207 -0
- package/src/api/meshes/_export.ts +6 -5
- package/src/api/rendering/IGraphicsDeviceFeatures.ts +28 -21
- package/src/api/rendering/IRenderer.ts +34 -1
- package/src/api/rendering/enums.ts +10 -0
- package/src/api/rendering/renderer-interface.ts +1 -36
- package/src/api/rendering/renderpass/RenderPassDescriptor.ts +10 -14
- package/src/api/rendering/swapchain/ISwapChain.ts +1 -3
- package/src/api/rendering/texture/TextureFormat.ts +128 -14
- package/src/api/rendering/texture/TextureUtilities.ts +225 -10
- package/src/api/scene/Scene.ts +102 -69
- package/src/api/scene/SceneMesh.ts +61 -0
- package/src/api/sprites/SpriteBatchMesh.ts +1 -1
- package/src/api/utilities/AlignUtilities.ts +2 -1
- package/src/api/window/WindowManager.ts +1 -1
- package/src/core/rendering/ARenderer.ts +24 -15
- package/src/index.ts +0 -1
- package/src/main.ts +2 -3
- package/src/webgl/WebGLGraphicsDeviceFeatures.ts +12 -2
- package/src/webgl/WebGlGpuInfo.ts +1 -1
- package/src/webgl/WebGlRenderer.ts +2 -5
- package/src/webgl/lights/WebGlLightsBuffer.ts +14 -4
- package/src/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.ts +18 -1
- package/src/webgl/swap-chain/WebGlSwapChain.ts +7 -6
- package/src/webgl/texture/WebGlTextureFactory.ts +49 -7
- package/src/webgl/utilities/WebGlConstants.ts +136 -0
- package/src/webgl/utilities/WebGlConverter.ts +91 -22
- package/src/webgl/utilities/WebGlErrorUtilities.ts +15 -0
- package/src/webgl/utilities/WebGlTextureUtilities.ts +5 -2
- package/src/webgl/utilities/WebGlUtilities.ts +4 -0
- package/src/webgpu/WebGpuGpuInfo.ts +61 -0
- package/src/webgpu/WebGpuGraphicsDevice.ts +199 -0
- package/src/webgpu/WebGpuGraphicsDeviceFeatures.ts +41 -0
- package/src/webgpu/WebGpuRenderer.ts +49 -0
- package/src/webgpu/WebGpuTypes.ts +288 -0
- package/src/webgpu/blending/WebGpuBlendState.ts +53 -0
- package/src/webgpu/buffers/WebGpuBuffersFactory.ts +46 -0
- package/src/webgpu/buffers/WebGpuIndexBuffer.ts +118 -0
- package/src/webgpu/buffers/WebGpuUniformBuffer.ts +102 -0
- package/src/webgpu/buffers/WebGpuVertexBuffer.ts +119 -0
- package/src/webgpu/primitive/WebGpuPrimitiveState.ts +52 -0
- package/src/webgpu/render-pass/WebGpuRenderPass.ts +131 -0
- package/src/webgpu/render-pipelines/AWebGpuRenderPipeline.ts +123 -0
- package/src/webgpu/render-pipelines/WebGpuMainRenderTargetRenderPipeline.ts +119 -0
- package/src/webgpu/render-pipelines/WebGpuRenderPipelineFactory.ts +66 -0
- package/src/webgpu/render-pipelines/material/AWebGpuMeshRenderPipeline.ts +249 -0
- package/src/webgpu/render-pipelines/material/WebGpuUnlitRenderPipeline.ts +101 -0
- package/src/webgpu/sampler/WebGpuSampler.ts +84 -0
- package/src/webgpu/shader/WebGpuShaderModule.ts +65 -0
- package/src/webgpu/shader/WebGpuShaderModuleLoader.ts +38 -0
- package/src/webgpu/shader/WgslShaderContent.ts +20 -0
- package/src/webgpu/swap-chain/WebGpuSwapChain.ts +93 -0
- package/src/webgpu/texture/WebGpuTexture2D.ts +197 -0
- package/src/webgpu/texture/WebGpuTextureFactory.ts +118 -0
- package/src/webgpu/texture/WebGpuTextureView.ts +43 -0
- package/src/webgpu/utilities/WebGpuConverter.ts +299 -0
- package/src/wgsl-raw.d.ts +4 -0
- package/dist/api/FrameworkConfiguration.d.ts +0 -23
- package/dist/api/FrameworkConfiguration.d.ts.map +0 -1
- package/dist/api/IFrameworkConfiguration.d.ts +0 -25
- package/dist/api/IFrameworkConfiguration.d.ts.map +0 -1
- package/dist/api/loaders/obj/ObjLoader.d.ts.map +0 -1
- package/dist/api/meshes/SubMesh.d.ts +0 -47
- package/dist/api/meshes/SubMesh.d.ts.map +0 -1
- package/src/api/FrameworkConfiguration.ts +0 -29
- package/src/api/IFrameworkConfiguration.ts +0 -30
- package/src/api/meshes/SubMesh.ts +0 -71
package/CHANGELOG.md
CHANGED
|
@@ -9,44 +9,36 @@ Compared with `main` (0.1.0).
|
|
|
9
9
|
|
|
10
10
|
### Breaking changes
|
|
11
11
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
12
|
+
- `FrameworkConfiguration` is no longer exported; pass an `IFrameworkConfiguration` object to `new Framework(...)`.
|
|
13
|
+
- `tsyringe` and `reflect-metadata` are removed; services use plain constructor wiring.
|
|
14
|
+
- `cameraFactory.createPerspectiveCamera` takes a descriptor object, and every `ICamera` now requires a `positionBuffer`.
|
|
15
|
+
- Meshes are split into `IMesh`/`Mesh` (geometry and buffers) and `IRenderableMesh`/`RenderableMesh` (material, index range, sub meshes, transform).
|
|
16
|
+
- Materials take a `modelBuffer` owned by the mesh instead of `modelMatrix`, and `renderMesh` takes an `IRenderableMesh`.
|
|
17
|
+
- Render pipelines throw when no model buffer is passed.
|
|
18
|
+
- Requires `ris-ktx2` 0.2.
|
|
18
19
|
|
|
19
20
|
### Added
|
|
20
21
|
|
|
21
|
-
- `Scene`
|
|
22
|
-
- Lights: `AmbientLight`, `DirectionalLight` and `PointLight
|
|
23
|
-
- `ForwardBlinnPhongMaterial
|
|
24
|
-
- Mesh transforms
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
- `geometryBuilder.create(descriptor)` with `GeometryDescriptor`. `BaseGeometry` is exported.
|
|
30
|
-
- `SpriteMaterial` and `materialFactory.createSpriteMaterial`; sprite batches draw through it.
|
|
31
|
-
- `UnlitMaterialDescriptor.camera` and a `camera` property on the unlit and Blinn-Phong materials. A scene assigns its camera through this property.
|
|
32
|
-
- Examples: `unlit_mesh`, `blinn_phong_mesh` and `sprite_batch`, with `npm run dev:examples` and `npm run build:examples`.
|
|
22
|
+
- `Scene` with `add`/`remove` for meshes, lights and the camera, plus `SceneMesh` for owning a mesh and its materials.
|
|
23
|
+
- Lights: `AmbientLight`, `DirectionalLight` and `PointLight`.
|
|
24
|
+
- `ForwardBlinnPhongMaterial`, `SpriteMaterial`, and the `ICameraMaterial`/`ILightsMaterial` interfaces.
|
|
25
|
+
- Mesh transforms (`position`, `rotation`, `scale`) and sub meshes (`addSubMesh`, `meshFactory.createWithSubMeshes`).
|
|
26
|
+
- OBJ/MTL loading through `framework.objLoader`, `ObjParser`, and `content.loadMeshAsync`, `loadUnlitMeshAsync` and `loadBlinnPhongMeshAsync`.
|
|
27
|
+
- `geometryBuilder.create(descriptor)` and the exported `BaseGeometry`.
|
|
28
|
+
- sRGB compressed texture formats (BC1, BC3, BC7, ETC2), with KTX2 loading choosing sRGB automatically.
|
|
29
|
+
- Examples: `unlit_mesh`, `blinn_phong_mesh` and `sprite_batch`.
|
|
33
30
|
|
|
34
31
|
### Changed
|
|
35
32
|
|
|
36
|
-
- `content.loadShaderModule
|
|
33
|
+
- `content.loadShaderModule` accepts optional replacement values.
|
|
37
34
|
|
|
38
35
|
### Fixed
|
|
39
36
|
|
|
40
|
-
-
|
|
41
|
-
- The orthographic camera's default eye was
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
### Removed
|
|
47
|
-
|
|
48
|
-
- The `tsyringe` and `reflect-metadata` dependencies.
|
|
49
|
-
- `IMaterial.modelMatrix`, replaced by `modelBuffer` (see Breaking changes).
|
|
37
|
+
- Sprites rendered white because of a stray value in the sprite shader.
|
|
38
|
+
- The orthographic camera's default eye was on the wrong side (z = -1).
|
|
39
|
+
- A second `Framework` instance reused the default texture and anisotropic-filtering extension from the first.
|
|
40
|
+
- A leftover `debugger` statement in WebGL device initialization.
|
|
41
|
+
- Swapped BC/S3TC compression flags could select BC7 on GPUs without BPTC support.
|
|
50
42
|
|
|
51
43
|
## [0.1.0]
|
|
52
44
|
|
package/README.md
CHANGED
|
@@ -1,200 +1,149 @@
|
|
|
1
1
|
# ris-framework
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A browser WebGL2 framework for TypeScript, published as an ES module (version 0.2.0). Runtime dependencies are `gl-matrix` and `ris-ktx2`.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
```sh
|
|
6
|
+
npm install ris-framework
|
|
7
|
+
```
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
Everything public is exported from the package entry: `Framework`, `TextureSamplerFilteringPreset`, and the API types (scenes, meshes, materials, lights, cameras, textures, loaders, input).
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
| --- | --- |
|
|
11
|
-
| `index.html` | The page. It has `#app` and `<canvas id="game-canvas" width="800" height="600">`. |
|
|
12
|
-
| `src/main.ts` | Application entry. |
|
|
13
|
-
| `src/index.ts` | Package entry. Exports `Framework`, `FrameworkConfiguration`, `TextureSamplerFilteringPreset`, and everything under `src/api`. |
|
|
14
|
-
| `src/Framework.ts` | `Framework`, which wires the renderer, factories, managers, and the frame loop together. |
|
|
15
|
-
| `src/api` | Interfaces and value types formerly published as `ris-framework-api` (input, textures, cameras, `TextureUtilities`, and the rest). It also holds `FrameworkConfiguration` and the backend-independent implementations: `WindowManager`, `InputManager`, `ContentManager`, `SpriteBatch`, `GeometryBuilder`, and `BaseGeometry`. `src/api/content/ShaderModuleContent.ts` maps the built-in shader module ids to GLSL from `shaders/glsl`. |
|
|
16
|
-
| `src/core` | Renderer and graphics-device base classes (`ARenderer`, `AGraphicsDevice`), the texture base class, blend and sampler descriptors, `VertexBufferLayout`, and `TextureSamplerFilteringPreset`. |
|
|
17
|
-
| `src/webgl` | The WebGL2 graphics device, renderer, textures, buffers, samplers, and render pipelines. |
|
|
18
|
-
| `shaders/glsl` | Vertex and fragment shaders used by the built-in shader modules. |
|
|
19
|
-
| `tests` | Vitest tests for the types under `src/api`. |
|
|
11
|
+
## Create and start a framework
|
|
20
12
|
|
|
21
|
-
|
|
13
|
+
Pass an `IFrameworkConfiguration` object. Every field is optional.
|
|
22
14
|
|
|
23
|
-
|
|
15
|
+
```ts
|
|
16
|
+
import { Color, Framework, type IFrameworkConfiguration, TextureSamplerFilteringPreset } from "ris-framework";
|
|
24
17
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
const config: IFrameworkConfiguration = {
|
|
19
|
+
canvas: document.querySelector<HTMLCanvasElement>("#game-canvas")!,
|
|
20
|
+
textureFiltering: TextureSamplerFilteringPreset.BILINEAR,
|
|
21
|
+
useKtx2: true,
|
|
22
|
+
};
|
|
28
23
|
|
|
29
|
-
|
|
24
|
+
const framework = new Framework(config);
|
|
30
25
|
|
|
31
|
-
|
|
26
|
+
framework.addOnLoadContentListener(async () => { /* load content */ });
|
|
27
|
+
framework.addOnUpdateListener(time => { /* update, time.deltaTimeSec */ });
|
|
28
|
+
framework.addOnRenderListener(() => { /* draw */ });
|
|
32
29
|
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
framework.initialize();
|
|
31
|
+
framework.renderer.clearColor = Color.cornerFlowerBlue();
|
|
35
32
|
```
|
|
36
33
|
|
|
37
|
-
|
|
34
|
+
| Field | Default | Meaning |
|
|
35
|
+
| --- | --- | --- |
|
|
36
|
+
| `canvas` | created and appended | The canvas to render into. |
|
|
37
|
+
| `backBufferSize` | `800 × 600` | Back buffer size. |
|
|
38
|
+
| `textureFiltering` | `BILINEAR` | Default sampler preset. |
|
|
39
|
+
| `textureColorSpace` | `SRGB` | Default texture colour space. |
|
|
40
|
+
| `useKtx2` | `false` | Creates `framework.ktx2Factory`. |
|
|
41
|
+
| `alpha` | `false` | Whether the back buffer has an alpha channel. |
|
|
42
|
+
| `powerPreference` | `DEFAULT` | GPU preference on multi-GPU systems. |
|
|
38
43
|
|
|
39
|
-
|
|
40
|
-
import { Framework, FrameworkConfiguration, TextureSamplerFilteringPreset } from "ris-framework";
|
|
41
|
-
```
|
|
44
|
+
Register listeners before `initialize()`. Load-content and initialized listeners run inside that call.
|
|
42
45
|
|
|
43
|
-
|
|
46
|
+
## Scenes, cameras and lights
|
|
44
47
|
|
|
45
48
|
```ts
|
|
46
|
-
import { Color,
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
`Framework`, `FrameworkConfiguration`, `TextureSamplerFilteringPreset`, and that API surface are the public entry. Built-in GLSL is compiled into `dist/index.js`, so a consumer does not load this repository's `shaders/` directory at runtime. The same file includes the browser KTX2 loader. A consuming Vite app can import the package and build without adding a Node stub of its own.
|
|
50
|
-
|
|
51
|
-
To work in this repository:
|
|
49
|
+
import { Color, DirectionalLight, PointLight, Scene } from "ris-framework";
|
|
52
50
|
|
|
53
|
-
|
|
54
|
-
npm ci
|
|
55
|
-
```
|
|
51
|
+
const scene = new Scene(framework);
|
|
56
52
|
|
|
57
|
-
|
|
53
|
+
// Passing the scene makes this the scene's camera.
|
|
54
|
+
const camera = framework.cameraFactory.createPerspectiveCamera({
|
|
55
|
+
aspectRatio: canvas.width / canvas.height,
|
|
56
|
+
eye: [0, 0, 3],
|
|
57
|
+
}, scene);
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
scene.activeAmbientLight.color = new Color(0.4, 0.4, 0.4);
|
|
60
|
+
// Lights take an optional scene; passing it adds them.
|
|
61
|
+
new DirectionalLight({ color: new Color(1, 1, 1), intensity: 0.8, direction: [-0.4, -0.6, 1] }, scene);
|
|
62
|
+
new PointLight({ color: new Color(1, 0.5, 0.2), intensity: 1.2, linear: 0.35, quadratic: 0.44 }, scene);
|
|
60
63
|
|
|
61
|
-
|
|
64
|
+
framework.addOnUpdateListener(time => {
|
|
65
|
+
camera.update(time);
|
|
66
|
+
scene.update(time);
|
|
67
|
+
});
|
|
68
|
+
framework.addOnRenderListener(() => scene.render());
|
|
69
|
+
```
|
|
62
70
|
|
|
63
|
-
|
|
71
|
+
`scene.add(item)` and `scene.remove(item)` accept a renderable mesh, a `SceneMesh`, a light or a camera. Blinn-Phong materials support up to 3 directional and 5 point lights.
|
|
64
72
|
|
|
65
|
-
|
|
73
|
+
## Meshes and materials
|
|
66
74
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
| `useKtx2` | `false` | When `true`, the constructor sets `framework.ktx2Factory` to a `Ktx2Factory`. `initialize()` then calls `initializeAsync()` on it and does not wait. When `false`, `ktx2Factory` stays unset. |
|
|
73
|
-
| `alpha` | `false` | Passed as the WebGL2 context's `alpha` attribute, so it decides whether the canvas back buffer has an alpha channel. |
|
|
74
|
-
| `powerPreference` | `PowerPreferenceType.DEFAULT` | Passed as the WebGL2 context's `powerPreference` (`"default"`, `"low-power"`, or `"high-performance"`). It only matters on machines with more than one GPU. |
|
|
75
|
+
- `IMesh` / `Mesh` hold geometry and the vertex and index buffers.
|
|
76
|
+
- `IRenderableMesh` / `RenderableMesh` add a material, an index range and sub meshes (`mesh.addSubMesh(material, start, count)` or `meshFactory.createWithSubMeshes`). The root mesh owns the transform and one model buffer, which all its sub meshes share.
|
|
77
|
+
- Transforms: `mesh.position`, `mesh.rotation` (Euler radians, applied Y, then X, then Z) and `mesh.scale`. `mesh.modelMatrix` is recomputed only when one of them changes.
|
|
78
|
+
- `SceneMesh`: `scene.add(mesh)` wraps a renderable mesh in a `SceneMesh`, which owns its materials. `sceneMesh.dispose()` and `scene.dispose()` dispose the mesh and each material once.
|
|
79
|
+
- Materials come from `framework.materialFactory`. They include unlit, `ForwardBlinnPhongMaterial` and `SpriteMaterial`.
|
|
75
80
|
|
|
76
|
-
|
|
81
|
+
## Loading OBJ/MTL
|
|
77
82
|
|
|
78
83
|
```ts
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
+
// Unlit or Blinn-Phong materials (one per usemtl), coloured from the .mtl.
|
|
85
|
+
const cube = await framework.content.loadBlinnPhongMeshAsync("/assets/cube.obj", camera);
|
|
86
|
+
const flat = await framework.content.loadUnlitMeshAsync("/assets/cube.obj", camera);
|
|
87
|
+
scene.add(cube);
|
|
88
|
+
|
|
89
|
+
// Lower level: pass a Blinn-Phong descriptor or a material factory per sub mesh.
|
|
90
|
+
const mesh = await framework.objLoader.loadAsync("/assets/cube.obj", {
|
|
91
|
+
projectionViewBuffer: camera.projectionViewBuffer,
|
|
92
|
+
cameraPositionBuffer: camera.positionBuffer,
|
|
93
|
+
});
|
|
84
94
|
|
|
85
|
-
|
|
95
|
+
// Geometry only, with no materials (GeometryFormat is exported from "ris-framework").
|
|
96
|
+
const geometry = await framework.content.loadMeshAsync("/assets/cube.obj", GeometryFormat.POS3_COLOR4_TEXTURECOORDS2);
|
|
86
97
|
```
|
|
87
98
|
|
|
88
|
-
`
|
|
89
|
-
|
|
90
|
-
`framework.renderingBackend` is `RenderingBackend.WEB_GL`. After `initialize()`, `framework.graphicsDevice` is the renderer's WebGL2 device.
|
|
99
|
+
`ObjLoader.parseAsync(path)` and `ObjParser` return plain data without creating GPU resources.
|
|
91
100
|
|
|
101
|
+
## Textures and KTX2
|
|
92
102
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
103
|
+
```ts
|
|
104
|
+
const png = await framework.content.loadTexture2DAsync("/assets/test.png");
|
|
105
|
+
const ktx = await framework.content.loadTexture2DAsync("/assets/kodim23.ktx2");
|
|
106
|
+
```
|
|
96
107
|
|
|
97
|
-
|
|
108
|
+
Paths ending in `.ktx2` are loaded through `ris-ktx2`.
|
|
98
109
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
5. Prepares the time manager.
|
|
104
|
-
6. Calls every `addOnLoadContentListener` callback. Async callbacks are not awaited.
|
|
105
|
-
7. Calls every `addOnInitializedListener` callback.
|
|
106
|
-
8. Creates the main render target at the canvas size and a swap-chain pass. The clear color at this moment is `Color.lightPink()`, the renderer default.
|
|
107
|
-
9. Subscribes an update callback and a render callback, then runs both once before returning. Later frames are scheduled with `requestAnimationFrame`.
|
|
110
|
+
- **Basis Universal files** are transcoded to the best format the GPU supports, in this order: BC7, ASTC 4×4, BC3, ETC2, PVRTC, and RGBA8 as a last resort.
|
|
111
|
+
- **Other KTX2 files** are uploaded in their stored format.
|
|
112
|
+
- **sRGB:** sRGB files load as sRGB formats (`BC7_RGBA_SRGB`, `BC3_RGBA_SRGB`, `BC1_RGB_SRGB`, `ETC2_RGBA8_SRGB`, `ETC2_RGB8_SRGB`, `ASTC_*_RGBA_SRGB`, `RGBA_8_UNORM_SRGB`), so the GPU decodes them to linear.
|
|
113
|
+
- **sRGB fallback:** if `WEBGL_compressed_texture_s3tc_srgb` is missing, sRGB BC1 and BC3 textures fall back to linear with a warning.
|
|
108
114
|
|
|
109
|
-
|
|
115
|
+
`framework.graphicsDevice.features` reports compression support: `supportsTextureCompressionBC` (BPTC/BC7), `supportsTextureCompressionS3TC`, `supportsTextureCompressionS3TCSrgb`, `supportsTextureCompressionETC2`, `supportsTextureCompressionASTC` and `supportsTextureCompressionPVRTC`.
|
|
110
116
|
|
|
111
|
-
|
|
117
|
+
## Sprites
|
|
112
118
|
|
|
113
119
|
```ts
|
|
114
|
-
import {
|
|
115
|
-
Color,
|
|
116
|
-
Rect,
|
|
117
|
-
SamplerDescriptor,
|
|
118
|
-
SamplerFilter,
|
|
119
|
-
TextureDescriptor,
|
|
120
|
-
TextureFormat,
|
|
121
|
-
type ISampler,
|
|
122
|
-
type ITexture2D,
|
|
123
|
-
} from "ris-framework";
|
|
124
|
-
|
|
125
|
-
const rect = new Rect(200, 200, 200, 200);
|
|
126
|
-
const texRect = new Rect(500, 200, 200, 200);
|
|
127
|
-
const color = Color.blue();
|
|
128
|
-
const white = Color.white();
|
|
129
|
-
let tex: ITexture2D;
|
|
130
|
-
let sampler: ISampler;
|
|
131
|
-
|
|
132
|
-
framework.addOnLoadContentListener(async () => {
|
|
133
|
-
const texDesc = new TextureDescriptor();
|
|
134
|
-
texDesc.generateMipmaps = true;
|
|
135
|
-
texDesc.textureFormat = TextureFormat.RGBA_8_UNORM;
|
|
136
|
-
|
|
137
|
-
tex = await framework.content.loadTexture2DAsync("/assets/test.png", texDesc);
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
framework.addOnInitializedListener(() => {
|
|
141
|
-
const desc = new SamplerDescriptor();
|
|
142
|
-
desc.minFilter = SamplerFilter.NEAREST;
|
|
143
|
-
desc.magFilter = SamplerFilter.NEAREST;
|
|
144
|
-
sampler = framework.graphicsDevice.createSampler(desc);
|
|
145
|
-
});
|
|
146
|
-
|
|
147
120
|
framework.addOnRenderListener(() => {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
spriteBatch.draw(tex, texRect, white);
|
|
153
|
-
}
|
|
154
|
-
spriteBatch.end();
|
|
121
|
+
framework.spriteBatch.begin();
|
|
122
|
+
framework.spriteBatch.draw(texture, new Rect(200, 200, 200, 200), Color.white());
|
|
123
|
+
framework.spriteBatch.drawRect(new Rect(500, 200, 100, 100), Color.blue());
|
|
124
|
+
framework.spriteBatch.end();
|
|
155
125
|
});
|
|
156
|
-
|
|
157
|
-
framework.initialize();
|
|
158
|
-
framework.renderer.clearColor = Color.lightPink();
|
|
159
126
|
```
|
|
160
127
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
The first `begin` / `drawRect` / `end` runs inside `initialize()`, before the texture promise resolves, so the blue rectangle is the first draw. Later frames draw the texture once `tex` is set. `spriteBatch.begin` with no matrix keeps the default orthographic camera. The sampler argument overrides the device's default sampler for that batch. `drawRect` draws the 1×1 white texture tinted by `color`.
|
|
164
|
-
|
|
165
|
-
`src/main.ts` also loads `/assets/cat.jpg` the same way and draws it at `new Rect(200, 500, 200, 200)`. Those two files are absent from this repository. Put them under `public/assets/` before those loads can succeed. The blue rectangle still draws when the image loads fail.
|
|
166
|
-
|
|
167
|
-
Setting `framework.renderer.clearColor` after `initialize()` updates later frames. The first frame has already cleared with the default light pink.
|
|
128
|
+
## Examples and scripts
|
|
168
129
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
`new Scene(framework)` holds meshes, lights and the camera. `scene.add(item)` and `scene.remove(item)` accept a mesh, an `AmbientLight`, `DirectionalLight`, `PointLight` or a camera; adding twice does nothing. Meshes, lights and the perspective camera given a scene in their constructor add themselves, and a disposed mesh removes itself. Adding a camera makes it `scene.camera`; removing the active camera clears it. `addLight`/`removeLight` remain as deprecated aliases.
|
|
172
|
-
|
|
173
|
-
## Examples
|
|
174
|
-
|
|
175
|
-
Browser examples live in [`examples/`](examples/), one folder per example. See [`examples/README.md`](examples/README.md).
|
|
130
|
+
Examples live in [`examples/`](examples/): `unlit_mesh`, `blinn_phong_mesh` and `sprite_batch` (see [`examples/README.md`](examples/README.md)).
|
|
176
131
|
|
|
177
132
|
```sh
|
|
178
|
-
npm
|
|
179
|
-
npm run
|
|
133
|
+
npm ci
|
|
134
|
+
npm run dev:examples # serve the examples
|
|
135
|
+
npm run build:examples # build them into examples/dist/
|
|
136
|
+
npm run dev # src/main.ts playground
|
|
137
|
+
npm test # type-check and Vitest
|
|
138
|
+
npm run build # library (dist/) and app build
|
|
180
139
|
```
|
|
181
140
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
These throw, or they accept a call and do not do the work the name suggests:
|
|
141
|
+
Requires Node.js 22 (or `^20.19.0`) and a WebGL2-capable browser.
|
|
185
142
|
|
|
186
|
-
|
|
187
|
-
- `Framework.dispose()` is empty. It does not release the window, device, or GPU resources.
|
|
188
|
-
- `renderer.beginComputePass()` and `renderer.endComputePass()` throw `Method not implemented.` `ARenderer.limits` throws the same error.
|
|
189
|
-
- `graphicsDevice.setupDebugCallback()`, `frameEnd()`, `pushDebugGroup()`, and `popDebugGroup()` throw `Method not implemented.`
|
|
190
|
-
- `ITexture2D.createView()` throws `Method not implemented.`
|
|
191
|
-
- `content.loadShaderModule` only resolves the built-in ids `sprite`, `unlit_material`, `inspect_texture_mips`, and `main_render_target_flip_y`. Any other id throws `Not implemented`.
|
|
192
|
-
- `SpriteBatch.draw` and `drawRect` accept rotation arguments and do not use them. `layerDepth` is written as the sprite's z position.
|
|
193
|
-
- Keyboard and gamepad queries return empty state. `getKeyboardState()` is an empty `KeyboardState`. `getGamePadState()` is a disconnected `GamePadState`. `thumbstickDeadZone` is stored and not applied.
|
|
194
|
-
- A render pass that enables stencil without depth throws `Not implemented`.
|
|
195
|
-
- Paths ending in `.ktx2` go through `content.loadKtx2Async`, which uses its own `Ktx2Factory` and does not call `initializeAsync`. The libktx module is shared by every `Ktx2Factory`, so `loadAsync` works only after some factory has finished `initializeAsync()`. `useKtx2` starts that call in `initialize()` but does not wait for it. To load a `.ktx2` file, set `useKtx2`, await `framework.ktx2Factory.initializeAsync()` before `initialize()`, and then call `loadTexture2DAsync` from a load-content listener. `src/main.ts` does not load a `.ktx2` file.
|
|
196
|
-
- The geometry and unlit-pipeline steps at the bottom of `src/main.ts` are comments. `geometryBuilder.quadGeometry()` can build quad data; the entry file does not upload it or draw it.
|
|
143
|
+
## Known limitations
|
|
197
144
|
|
|
198
|
-
|
|
145
|
+
- Window resize listeners and compute passes throw `Method not implemented.`
|
|
146
|
+
- Keyboard and gamepad state are stubs.
|
|
147
|
+
- `SpriteBatch` ignores rotation.
|
|
199
148
|
|
|
200
|
-
|
|
149
|
+
Branch and publish rules are in [CONTRIBUTING.md](CONTRIBUTING.md). Changes are listed in [CHANGELOG.md](CHANGELOG.md).
|
package/dist/Framework.d.ts
CHANGED
|
@@ -1,29 +1,38 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { GameTime, type IBufferFactory, type IGeometryBuilder, type IGraphicsDevice, type IImageProcessor, type IInputManager, type IMaterialFactory, type
|
|
1
|
+
import { ObjLoader } from "./api/loaders/ObjLoader.js";
|
|
2
|
+
import { type AmbientLightFactory, GameTime, type IBufferFactory, type ICameraFactory, type IContentManager, type IFramework, IFrameworkConfiguration, type IGeometryBuilder, type IGraphicsDevice, type IImageLoader, type IImageProcessor, type IInputManager, type IMaterialFactory, type IMeshFactory, type IRenderer, type IRenderPipelineFactory, type ISpriteBatch, type ITextureFactory, type ITimeManager, type IWindowManager, RenderingBackend } from "./api/index.js";
|
|
3
3
|
import type { IKtx2Factory } from "ris-ktx2";
|
|
4
|
+
/** The Ris framework */
|
|
4
5
|
export declare class Framework implements IFramework {
|
|
5
6
|
private readonly _onLoadContentListeners;
|
|
6
7
|
private readonly _onInitializeListeners;
|
|
7
8
|
private readonly _onUpdateListeners;
|
|
8
9
|
private readonly _onRenderListeners;
|
|
9
|
-
private
|
|
10
|
-
private
|
|
11
|
-
private
|
|
10
|
+
private _configuration;
|
|
11
|
+
private _textureFactory;
|
|
12
|
+
private _buffersFactory;
|
|
13
|
+
private _contentManager;
|
|
14
|
+
private readonly _rendererConfiguration;
|
|
15
|
+
private _renderer;
|
|
12
16
|
private readonly _geometryBuilder;
|
|
13
17
|
private readonly _meshFactory;
|
|
14
18
|
private _disposed;
|
|
15
19
|
/**
|
|
16
20
|
* The constructor for the Framework class.
|
|
17
|
-
* @param
|
|
21
|
+
* @param configuration The optional framework configuration. When omitted, a default `FrameworkConfiguration` is used.
|
|
18
22
|
*/
|
|
19
|
-
constructor(
|
|
23
|
+
constructor(configuration?: IFrameworkConfiguration);
|
|
20
24
|
/** @inheritDoc */
|
|
21
25
|
readonly imageLoader: IImageLoader;
|
|
22
26
|
renderingBackend: RenderingBackend;
|
|
23
27
|
/** @inheritDoc */
|
|
24
28
|
readonly imageProcessor: IImageProcessor;
|
|
25
29
|
/** @inheritDoc */
|
|
26
|
-
|
|
30
|
+
get renderer(): IRenderer;
|
|
31
|
+
/**
|
|
32
|
+
* Creates the backend-specific services: renderer, texture factory, pipeline factory, shader loader and buffers factory.
|
|
33
|
+
* @param backend WEB_GL or WEB_GPU.
|
|
34
|
+
*/
|
|
35
|
+
private _setupBackendServices;
|
|
27
36
|
/** @inheritDoc */
|
|
28
37
|
readonly spriteBatch: ISpriteBatch;
|
|
29
38
|
/** @inheritDoc */
|
|
@@ -68,6 +77,8 @@ export declare class Framework implements IFramework {
|
|
|
68
77
|
/** @inheritdoc */
|
|
69
78
|
get meshFactory(): IMeshFactory;
|
|
70
79
|
/** @inheritDoc */
|
|
80
|
+
readonly objLoader: ObjLoader;
|
|
81
|
+
/** @inheritDoc */
|
|
71
82
|
readonly materialFactory: IMaterialFactory;
|
|
72
83
|
/** @inheritDoc */
|
|
73
84
|
readonly lightsFactory: AmbientLightFactory;
|
|
@@ -77,6 +88,13 @@ export declare class Framework implements IFramework {
|
|
|
77
88
|
readonly input: IInputManager;
|
|
78
89
|
/** @inheritdoc */
|
|
79
90
|
initialize(): void;
|
|
91
|
+
/**
|
|
92
|
+
* Initializes the framework and starts the event loop. Required for WebGPU, which requests its adapter
|
|
93
|
+
* and device asynchronously; for WebGL it behaves like {@link initialize}.
|
|
94
|
+
* If the WebGPU device cannot be acquired, the framework falls back to WebGL with a warning.
|
|
95
|
+
*/
|
|
96
|
+
initializeAsync(): Promise<void>;
|
|
97
|
+
private _initializeCore;
|
|
80
98
|
/**
|
|
81
99
|
* Stops the event loop and disposes the framework's services and GL resources,
|
|
82
100
|
* including per-framework caches such as the default texture and the shader modules.
|
package/dist/Framework.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Framework.d.ts","sourceRoot":"","sources":["../src/Framework.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Framework.d.ts","sourceRoot":"","sources":["../src/Framework.ts"],"names":[],"mappings":"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"}
|
package/dist/api/IFramework.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import type { IBufferFactory } from "./rendering/buffers/IBufferFactory.js";
|
|
|
7
7
|
import type { IGeometryBuilder } from "./geometry/IGeometryBuilder.js";
|
|
8
8
|
import type { ICameraFactory } from "./camera/ICameraFactory.js";
|
|
9
9
|
import type { ITextureFactory } from "./rendering/texture/ITextureFactory.js";
|
|
10
|
+
import type { ObjLoader } from "./loaders/ObjLoader.js";
|
|
10
11
|
import type { IContentManager } from "./content/IContentManager.js";
|
|
11
12
|
import type { IImageLoader } from "./loaders/IImageLoader.js";
|
|
12
13
|
import type { IMeshFactory } from "./meshes/IMeshFactory.js";
|
|
@@ -19,6 +20,39 @@ import { GameTime } from "./time/GameTime.js";
|
|
|
19
20
|
import type { IImageProcessor } from "./image/IImageProcessor.js";
|
|
20
21
|
import type { IKtx2Factory } from "ris-ktx2";
|
|
21
22
|
import type { IDisposable } from "./core/IDisposable.js";
|
|
23
|
+
import type { vec2 } from "gl-matrix";
|
|
24
|
+
import type { TextureSamplerFilteringPreset } from "../core/rendering/enums.js";
|
|
25
|
+
import type { PowerPreferenceType } from "./rendering/PowerPreference.js";
|
|
26
|
+
import type { TextureColorSpace } from "./rendering/enums.js";
|
|
27
|
+
/**
|
|
28
|
+
* The configuration for the framework.
|
|
29
|
+
* @public
|
|
30
|
+
**/
|
|
31
|
+
export declare class IFrameworkConfiguration {
|
|
32
|
+
/** If true, creates and makes the KTX2 factory available. */
|
|
33
|
+
useKtx2?: boolean;
|
|
34
|
+
/** The size of back buffer. By default, if not specified (800, 600). */
|
|
35
|
+
backBufferSize?: vec2;
|
|
36
|
+
/** The texture filtering to configure */
|
|
37
|
+
textureFiltering?: TextureSamplerFilteringPreset;
|
|
38
|
+
/** The texture color space to use by default. By default, it is {@link TextureColorSpace.SRGB}. */
|
|
39
|
+
textureColorSpace?: TextureColorSpace;
|
|
40
|
+
/**
|
|
41
|
+
* The HTMLCanvasElement to use for rendering.
|
|
42
|
+
* If null, a new canvas will be created and added to the document body.
|
|
43
|
+
*/
|
|
44
|
+
canvas?: HTMLCanvasElement;
|
|
45
|
+
/** Should back buffer use alpha. */
|
|
46
|
+
alpha?: boolean;
|
|
47
|
+
/** The preference when it comes to selecting GPU device. Only makes sense to set on multi-GPU devices. */
|
|
48
|
+
powerPreference?: PowerPreferenceType;
|
|
49
|
+
/**
|
|
50
|
+
* The rendering backend. Defaults to WebGL.
|
|
51
|
+
* WebGPU requires `Framework.initializeAsync()`; when `navigator.gpu` is missing or no device is available,
|
|
52
|
+
* the framework falls back to WebGL with a warning.
|
|
53
|
+
*/
|
|
54
|
+
renderingBackend?: RenderingBackend;
|
|
55
|
+
}
|
|
22
56
|
/** The framework interface. */
|
|
23
57
|
export interface IFramework extends IDisposable {
|
|
24
58
|
/**
|
|
@@ -72,6 +106,10 @@ export interface IFramework extends IDisposable {
|
|
|
72
106
|
* The mesh factory.
|
|
73
107
|
*/
|
|
74
108
|
readonly meshFactory: IMeshFactory;
|
|
109
|
+
/**
|
|
110
|
+
* The OBJ loader: `objLoader.loadAsync(path, blinnPhongDescriptor | subMesh => material)`.
|
|
111
|
+
*/
|
|
112
|
+
readonly objLoader: ObjLoader;
|
|
75
113
|
/**
|
|
76
114
|
* The material factory.
|
|
77
115
|
*/
|
|
@@ -122,5 +160,10 @@ export interface IFramework extends IDisposable {
|
|
|
122
160
|
removeOnRenderListener(event: () => void): void;
|
|
123
161
|
/** Initializes the framework. */
|
|
124
162
|
initialize(): void;
|
|
163
|
+
/**
|
|
164
|
+
* Initializes the framework asynchronously and starts the event loop.
|
|
165
|
+
* Required for the WebGPU backend; for WebGL it behaves like {@link initialize}.
|
|
166
|
+
*/
|
|
167
|
+
initializeAsync(): Promise<void>;
|
|
125
168
|
}
|
|
126
169
|
//# sourceMappingURL=IFramework.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IFramework.d.ts","sourceRoot":"","sources":["../../src/api/IFramework.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wDAAwD,CAAC;AACrG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"IFramework.d.ts","sourceRoot":"","sources":["../../src/api/IFramework.ts"],"names":[],"mappings":"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"}
|
package/dist/api/_export.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export * from "./IFramework.js";
|
|
2
|
-
export * from "./IFrameworkConfiguration.js";
|
|
3
2
|
export * from "./rendering/texture/_export-texture.js";
|
|
4
3
|
export * from "./rendering/buffers/_export-buffers.js";
|
|
5
4
|
export * from "./data/_export.js";
|
|
@@ -24,6 +23,7 @@ export * from "./meshes/_export.js";
|
|
|
24
23
|
export * from "./material/_export.js";
|
|
25
24
|
export * from "./lights/_export.js";
|
|
26
25
|
export * from "./scene/Scene.js";
|
|
26
|
+
export * from "./scene/SceneMesh.js";
|
|
27
27
|
export * from "./input/_export.js";
|
|
28
28
|
export * from "./image/_export.js";
|
|
29
29
|
//# sourceMappingURL=_export.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_export.d.ts","sourceRoot":"","sources":["../../src/api/_export.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,
|
|
1
|
+
{"version":3,"file":"_export.d.ts","sourceRoot":"","sources":["../../src/api/_export.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0DAA0D,CAAC;AACzE,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AACpC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
|