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