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.
- package/CHANGELOG.md +42 -1
- package/README.md +27 -4
- package/dist/Framework.d.ts +34 -10
- package/dist/Framework.d.ts.map +1 -1
- package/dist/api/IFramework.d.ts +50 -6
- package/dist/api/IFramework.d.ts.map +1 -1
- package/dist/api/_export.d.ts +3 -1
- package/dist/api/_export.d.ts.map +1 -1
- package/dist/api/camera/CameraFactory.d.ts +3 -2
- package/dist/api/camera/CameraFactory.d.ts.map +1 -1
- package/dist/api/camera/ICamera.d.ts +5 -0
- package/dist/api/camera/ICamera.d.ts.map +1 -1
- package/dist/api/camera/ICameraFactory.d.ts +5 -6
- package/dist/api/camera/ICameraFactory.d.ts.map +1 -1
- package/dist/api/camera/OrthographicCamera.d.ts +7 -0
- package/dist/api/camera/OrthographicCamera.d.ts.map +1 -1
- package/dist/api/camera/PerspectiveCamera.d.ts +30 -6
- package/dist/api/camera/PerspectiveCamera.d.ts.map +1 -1
- package/dist/api/content/ContentManager.d.ts +15 -2
- package/dist/api/content/ContentManager.d.ts.map +1 -1
- package/dist/api/content/IContentManager.d.ts +35 -1
- package/dist/api/content/IContentManager.d.ts.map +1 -1
- package/dist/api/content/ShaderModuleContent.d.ts.map +1 -1
- package/dist/api/data/Color.d.ts +5 -0
- package/dist/api/data/Color.d.ts.map +1 -1
- package/dist/api/geometry/BaseGeometry.d.ts +9 -0
- package/dist/api/geometry/BaseGeometry.d.ts.map +1 -1
- package/dist/api/geometry/GeometryBuilder.d.ts +3 -1
- package/dist/api/geometry/GeometryBuilder.d.ts.map +1 -1
- package/dist/api/geometry/IGeometryBuilder.d.ts +24 -0
- package/dist/api/geometry/IGeometryBuilder.d.ts.map +1 -1
- package/dist/api/geometry/_export-geometry.d.ts +1 -0
- package/dist/api/geometry/_export-geometry.d.ts.map +1 -1
- package/dist/api/input/InputManager.d.ts +4 -0
- package/dist/api/input/InputManager.d.ts.map +1 -1
- package/dist/api/lights/AmbientLight.d.ts +35 -0
- package/dist/api/lights/AmbientLight.d.ts.map +1 -0
- package/dist/api/lights/DirectionalLight.d.ts +40 -0
- package/dist/api/lights/DirectionalLight.d.ts.map +1 -0
- package/dist/api/lights/LightFactory.d.ts +18 -0
- package/dist/api/lights/LightFactory.d.ts.map +1 -0
- package/dist/api/lights/LightId.d.ts +6 -0
- package/dist/api/lights/LightId.d.ts.map +1 -0
- package/dist/api/lights/LightsBuffer.d.ts +77 -0
- package/dist/api/lights/LightsBuffer.d.ts.map +1 -0
- package/dist/api/lights/PointLight.d.ts +59 -0
- package/dist/api/lights/PointLight.d.ts.map +1 -0
- package/dist/api/lights/_export.d.ts +6 -0
- package/dist/api/lights/_export.d.ts.map +1 -0
- package/dist/api/loaders/ObjGeometryMapper.d.ts +19 -0
- package/dist/api/loaders/ObjGeometryMapper.d.ts.map +1 -0
- 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 +2 -0
- package/dist/api/loaders/_export.d.ts.map +1 -1
- package/dist/api/loaders/obj/ObjParser.d.ts +44 -0
- package/dist/api/loaders/obj/ObjParser.d.ts.map +1 -0
- package/dist/api/loaders/obj/ObjTypes.d.ts +119 -0
- package/dist/api/loaders/obj/ObjTypes.d.ts.map +1 -0
- package/dist/api/loaders/obj/index.d.ts +3 -0
- package/dist/api/loaders/obj/index.d.ts.map +1 -0
- package/dist/api/material/ForwardBlinnPhongMaterial.d.ts +138 -0
- package/dist/api/material/ForwardBlinnPhongMaterial.d.ts.map +1 -0
- 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 +13 -10
- package/dist/api/material/IMaterial.d.ts.map +1 -1
- package/dist/api/material/IMaterialFactory.d.ts +17 -2
- package/dist/api/material/IMaterialFactory.d.ts.map +1 -1
- package/dist/api/material/InspectTextureMipsMaterial.d.ts +18 -9
- package/dist/api/material/InspectTextureMipsMaterial.d.ts.map +1 -1
- package/dist/api/material/MaterialFactory.d.ts +6 -0
- package/dist/api/material/MaterialFactory.d.ts.map +1 -1
- package/dist/api/material/SpriteMaterial.d.ts +51 -0
- package/dist/api/material/SpriteMaterial.d.ts.map +1 -0
- package/dist/api/material/UnlitMaterial.d.ts +32 -13
- package/dist/api/material/UnlitMaterial.d.ts.map +1 -1
- package/dist/api/material/_export.d.ts +4 -0
- package/dist/api/material/_export.d.ts.map +1 -1
- package/dist/api/meshes/IMesh.d.ts +31 -6
- package/dist/api/meshes/IMesh.d.ts.map +1 -1
- package/dist/api/meshes/IMeshFactory.d.ts +30 -4
- 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 +14 -8
- package/dist/api/meshes/Mesh.d.ts.map +1 -1
- package/dist/api/meshes/MeshFactory.d.ts +10 -3
- package/dist/api/meshes/MeshFactory.d.ts.map +1 -1
- package/dist/api/meshes/QuadMesh.d.ts +5 -3
- 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 -0
- 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/render-pipelines/IForwardBlinnPhongRenderPipeline.d.ts +56 -0
- package/dist/api/rendering/render-pipelines/IForwardBlinnPhongRenderPipeline.d.ts.map +1 -0
- package/dist/api/rendering/render-pipelines/IRenderPipeline.d.ts +3 -0
- package/dist/api/rendering/render-pipelines/IRenderPipeline.d.ts.map +1 -1
- package/dist/api/rendering/render-pipelines/IRenderPipelineFactory.d.ts +29 -0
- package/dist/api/rendering/render-pipelines/IRenderPipelineFactory.d.ts.map +1 -1
- package/dist/api/rendering/render-pipelines/_export-render-pipelines.d.ts +1 -0
- package/dist/api/rendering/render-pipelines/_export-render-pipelines.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 +113 -0
- package/dist/api/scene/Scene.d.ts.map +1 -0
- package/dist/api/scene/SceneMesh.d.ts +27 -0
- package/dist/api/scene/SceneMesh.d.ts.map +1 -0
- package/dist/api/shader/IShaderModuleLoader.d.ts +4 -1
- package/dist/api/shader/IShaderModuleLoader.d.ts.map +1 -1
- package/dist/api/shader/{shader-loader.d.ts → ShaderLoader.d.ts} +1 -1
- package/dist/api/shader/ShaderLoader.d.ts.map +1 -0
- package/dist/api/sprites/SpriteBatchDrawable.d.ts +1 -1
- package/dist/api/sprites/SpriteBatchDrawable.d.ts.map +1 -1
- package/dist/api/sprites/SpriteBatchMesh.d.ts +14 -1
- package/dist/api/sprites/SpriteBatchMesh.d.ts.map +1 -1
- package/dist/api/utilities/AlignUtilities.d.ts.map +1 -1
- package/dist/api/utilities/GeometryUtilities.d.ts.map +1 -1
- package/dist/api/window/WindowManager.d.ts +4 -0
- 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/core/rendering/vertex-buffer-layout.d.ts +1 -0
- package/dist/core/rendering/vertex-buffer-layout.d.ts.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9238 -4595
- package/dist/webgl/WebGLGraphicsDeviceFeatures.d.ts +4 -0
- package/dist/webgl/WebGLGraphicsDeviceFeatures.d.ts.map +1 -1
- package/dist/webgl/WebGlGraphicsDevice.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/WebGlAmbientLightFactory.d.ts +17 -0
- package/dist/webgl/lights/WebGlAmbientLightFactory.d.ts.map +1 -0
- package/dist/webgl/lights/WebGlLightsBuffer.d.ts +59 -0
- package/dist/webgl/lights/WebGlLightsBuffer.d.ts.map +1 -0
- package/dist/webgl/render-pipelines/AWebGlRenderPipeline.d.ts +3 -1
- package/dist/webgl/render-pipelines/AWebGlRenderPipeline.d.ts.map +1 -1
- package/dist/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.d.ts +5 -0
- package/dist/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.d.ts.map +1 -1
- package/dist/webgl/render-pipelines/WebGlRenderPipelineFactory.d.ts +3 -1
- package/dist/webgl/render-pipelines/WebGlRenderPipelineFactory.d.ts.map +1 -1
- package/dist/webgl/render-pipelines/inspect/WebGlInspectTextureMipsRenderPipeline.d.ts +3 -1
- package/dist/webgl/render-pipelines/inspect/WebGlInspectTextureMipsRenderPipeline.d.ts.map +1 -1
- package/dist/webgl/render-pipelines/material/WebGlBlinnPhongRenderPipeline.d.ts +88 -0
- package/dist/webgl/render-pipelines/material/WebGlBlinnPhongRenderPipeline.d.ts.map +1 -0
- package/dist/webgl/render-pipelines/material/WebGlUnlitRenderPipeline.d.ts +3 -1
- package/dist/webgl/render-pipelines/material/WebGlUnlitRenderPipeline.d.ts.map +1 -1
- package/dist/webgl/render-pipelines/sprite/WebGlSpriteRenderPipeline.d.ts +3 -1
- package/dist/webgl/render-pipelines/sprite/WebGlSpriteRenderPipeline.d.ts.map +1 -1
- package/dist/webgl/shader/WebGlShaderModule.d.ts +4 -1
- package/dist/webgl/shader/WebGlShaderModule.d.ts.map +1 -1
- package/dist/webgl/shader/WebGlShaderModuleLoader.d.ts +16 -5
- package/dist/webgl/shader/WebGlShaderModuleLoader.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/WebGlTexture2D.d.ts +8 -1
- package/dist/webgl/texture/WebGlTexture2D.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/webgl/utilities/webgl-filter-anisotropic-utilities.d.ts +0 -1
- package/dist/webgl/utilities/webgl-filter-anisotropic-utilities.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 +4 -4
- package/shaders/glsl/forward_blinn_phong_material_fs.glsl +110 -0
- package/shaders/glsl/forward_blinn_phong_material_vs.glsl +32 -0
- package/shaders/glsl/main_render_target_flip_y_fs.glsl +35 -1
- package/shaders/glsl/sprite_fs.glsl +1 -1
- package/shaders/glsl/unlit_material_fs.glsl +1 -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 +156 -48
- package/src/api/IFramework.ts +63 -6
- package/src/api/_export.ts +3 -1
- package/src/api/camera/CameraFactory.ts +6 -6
- package/src/api/camera/ICamera.ts +6 -0
- package/src/api/camera/ICameraFactory.ts +5 -10
- package/src/api/camera/OrthographicCamera.ts +23 -1
- package/src/api/camera/PerspectiveCamera.ts +60 -15
- package/src/api/content/ContentManager.ts +78 -16
- package/src/api/content/IContentManager.ts +37 -1
- package/src/api/content/ShaderModuleContent.ts +9 -0
- package/src/api/data/Color.ts +7 -1
- package/src/api/geometry/BaseGeometry.ts +23 -0
- package/src/api/geometry/GeometryBuilder.ts +14 -2
- package/src/api/geometry/IGeometryBuilder.ts +31 -1
- package/src/api/geometry/_export-geometry.ts +2 -1
- package/src/api/input/InputManager.ts +14 -5
- package/src/api/lights/AmbientLight.ts +53 -0
- package/src/api/lights/DirectionalLight.ts +60 -0
- package/src/api/lights/LightFactory.ts +21 -0
- package/src/api/lights/LightId.ts +9 -0
- package/src/api/lights/LightsBuffer.ts +94 -0
- package/src/api/lights/PointLight.ts +91 -0
- package/src/api/lights/_export.ts +5 -0
- package/src/api/loaders/ObjGeometryMapper.ts +28 -0
- package/src/api/loaders/ObjLoader.ts +126 -0
- package/src/api/loaders/_export.ts +3 -1
- package/src/api/loaders/obj/ObjParser.ts +301 -0
- package/src/api/loaders/obj/ObjTypes.ts +142 -0
- package/src/api/loaders/obj/index.ts +5 -0
- package/src/api/material/ForwardBlinnPhongMaterial.ts +328 -0
- package/src/api/material/ICameraMaterial.ts +22 -0
- package/src/api/material/ILightsMaterial.ts +32 -0
- package/src/api/material/IMaterial.ts +13 -10
- package/src/api/material/IMaterialFactory.ts +19 -2
- package/src/api/material/InspectTextureMipsMaterial.ts +65 -26
- package/src/api/material/MaterialFactory.ts +12 -0
- package/src/api/material/SpriteMaterial.ts +83 -0
- package/src/api/material/UnlitMaterial.ts +105 -32
- package/src/api/material/_export.ts +5 -1
- package/src/api/meshes/IMesh.ts +40 -6
- package/src/api/meshes/IMeshFactory.ts +33 -4
- package/src/api/meshes/IRenderableMesh.ts +58 -0
- package/src/api/meshes/Mesh.ts +50 -43
- package/src/api/meshes/MeshFactory.ts +37 -4
- package/src/api/meshes/QuadMesh.ts +6 -4
- package/src/api/meshes/RenderableMesh.ts +207 -0
- package/src/api/meshes/_export.ts +6 -4
- 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/render-pipelines/IForwardBlinnPhongRenderPipeline.ts +66 -0
- package/src/api/rendering/render-pipelines/IRenderPipeline.ts +4 -0
- package/src/api/rendering/render-pipelines/IRenderPipelineFactory.ts +39 -0
- package/src/api/rendering/render-pipelines/_export-render-pipelines.ts +2 -1
- 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 +297 -0
- package/src/api/scene/SceneMesh.ts +61 -0
- package/src/api/shader/IShaderModuleLoader.ts +2 -1
- package/src/api/sprites/SpriteBatchDrawable.ts +12 -16
- package/src/api/sprites/SpriteBatchMesh.ts +22 -3
- package/src/api/utilities/AlignUtilities.ts +2 -1
- package/src/api/utilities/GeometryUtilities.ts +2 -0
- package/src/api/window/WindowManager.ts +23 -3
- package/src/core/rendering/ARenderer.ts +24 -15
- package/src/core/rendering/vertex-buffer-layout.ts +32 -1
- package/src/index.ts +0 -1
- package/src/main.ts +2 -4
- package/src/webgl/WebGLGraphicsDeviceFeatures.ts +12 -2
- package/src/webgl/WebGlGpuInfo.ts +1 -1
- package/src/webgl/WebGlGraphicsDevice.ts +0 -1
- package/src/webgl/WebGlRenderer.ts +2 -5
- package/src/webgl/lights/WebGlAmbientLightFactory.ts +35 -0
- package/src/webgl/lights/WebGlLightsBuffer.ts +225 -0
- package/src/webgl/render-pipelines/AWebGlRenderPipeline.ts +7 -1
- package/src/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.ts +21 -1
- package/src/webgl/render-pipelines/WebGlRenderPipelineFactory.ts +24 -2
- package/src/webgl/render-pipelines/inspect/WebGlInspectTextureMipsRenderPipeline.ts +16 -6
- package/src/webgl/render-pipelines/material/WebGlBlinnPhongRenderPipeline.ts +300 -0
- package/src/webgl/render-pipelines/material/WebGlUnlitRenderPipeline.ts +16 -6
- package/src/webgl/render-pipelines/sprite/WebGlSpriteRenderPipeline.ts +11 -7
- package/src/webgl/shader/WebGlShaderModule.ts +11 -4
- package/src/webgl/shader/WebGlShaderModuleLoader.ts +29 -10
- package/src/webgl/swap-chain/WebGlSwapChain.ts +7 -6
- package/src/webgl/texture/WebGlTexture2D.ts +19 -5
- 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/webgl/utilities/webgl-filter-anisotropic-utilities.ts +9 -6
- 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/shader/shader-loader.d.ts.map +0 -1
- package/src/api/FrameworkConfiguration.ts +0 -29
- package/src/api/IFrameworkConfiguration.ts +0 -30
- /package/src/api/shader/{shader-loader.ts → ShaderLoader.ts} +0 -0
package/src/Framework.ts
CHANGED
|
@@ -1,40 +1,42 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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
|
|
57
|
-
private
|
|
58
|
-
private
|
|
59
|
-
private
|
|
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
|
|
79
|
+
* @param configuration The optional framework configuration. When omitted, a default `FrameworkConfiguration` is used.
|
|
66
80
|
*/
|
|
67
|
-
constructor(
|
|
68
|
-
|
|
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(!
|
|
90
|
+
if(!this._configuration.canvas){
|
|
72
91
|
console.warn("Canvas not provided. Creating canvas and appending it to document.body.")
|
|
73
92
|
}
|
|
74
|
-
|
|
93
|
+
this._configuration.backBufferSize = this._configuration.backBufferSize ?? vec2.fromValues(800, 600);
|
|
75
94
|
|
|
76
|
-
this.
|
|
77
|
-
this.windowManager = new WindowManager(options.canvas ?? null);
|
|
95
|
+
this.windowManager = new WindowManager(this._configuration.canvas ?? null);
|
|
78
96
|
|
|
79
|
-
//
|
|
80
|
-
|
|
81
|
-
backBufferSize:
|
|
82
|
-
textureFiltering:
|
|
83
|
-
alpha:
|
|
84
|
-
powerPreference:
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
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(
|
|
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
|
|
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
|
-
|
|
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
|
-
//
|
|
239
|
-
for(const listener of this.
|
|
326
|
+
// Initialize callbacks.
|
|
327
|
+
for(const listener of this._onInitializeListeners){
|
|
240
328
|
listener();
|
|
241
329
|
}
|
|
242
330
|
|
|
243
|
-
|
|
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
|
-
/**
|
|
275
|
-
|
|
276
|
-
|
|
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
|
-
|
|
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
|
}
|
package/src/api/IFramework.ts
CHANGED
|
@@ -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
|
}
|
package/src/api/_export.ts
CHANGED
|
@@ -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(
|
|
50
|
-
|
|
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
|
|
14
|
-
* @param
|
|
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,
|
|
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
|
}
|