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
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { GeometryFormat } from "../geometry/GeometryFormat.ts";
|
|
2
|
+
import type {IRenderableMesh} from "../meshes/IRenderableMesh.ts";
|
|
3
|
+
import type { IVertexBuffer } from "../rendering/buffers/IVertexBuffer.ts";
|
|
4
|
+
import type { IIndexBuffer } from "../rendering/buffers/IIndexBuffer.ts";
|
|
5
|
+
import type { ITexture2D } from "../rendering/texture/ITexture2D.ts";
|
|
6
|
+
import type { ISampler } from "../rendering/sampler/ISampler.ts";
|
|
7
|
+
import type { IFramework } from "../IFramework.ts";
|
|
8
|
+
import type { IUniformBuffer } from "../rendering/buffers/IUniformBuffer.ts";
|
|
9
|
+
import type { ISpriteRenderPipeline } from "../rendering/render-pipelines/ISpriteRenderPipeline.ts";
|
|
10
|
+
import type { IMaterial } from "./IMaterial.ts";
|
|
11
|
+
|
|
12
|
+
/** The sprite material descriptor. */
|
|
13
|
+
export interface SpriteMaterialDescriptor {
|
|
14
|
+
|
|
15
|
+
/** The projection view buffer. Shared, it is not disposed by the material. */
|
|
16
|
+
projectionViewBuffer: IUniformBuffer;
|
|
17
|
+
|
|
18
|
+
/** The sprite texture. */
|
|
19
|
+
texture: ITexture2D;
|
|
20
|
+
|
|
21
|
+
/** The texture sampler. */
|
|
22
|
+
sampler: ISampler;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The sprite material.
|
|
27
|
+
*/
|
|
28
|
+
export class SpriteMaterial implements IMaterial {
|
|
29
|
+
|
|
30
|
+
private readonly _renderPipeline: ISpriteRenderPipeline;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The constructor.
|
|
34
|
+
* @param framework - The framework.
|
|
35
|
+
* @param descriptor - The sprite material descriptor.
|
|
36
|
+
*/
|
|
37
|
+
public constructor(framework: IFramework, descriptor: SpriteMaterialDescriptor) {
|
|
38
|
+
this._renderPipeline = framework.renderPipelineFactory.createSpriteRenderPipeline(descriptor.projectionViewBuffer);
|
|
39
|
+
this._renderPipeline.textureSampler = descriptor.sampler;
|
|
40
|
+
this._renderPipeline.spriteTexture = descriptor.texture;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** @inheritDoc */
|
|
44
|
+
public get geometryFormat(): GeometryFormat {
|
|
45
|
+
return this._renderPipeline.geometryFormat;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** The sprite texture. */
|
|
49
|
+
public get texture(): ITexture2D {
|
|
50
|
+
return this._renderPipeline.spriteTexture;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** The sprite texture. */
|
|
54
|
+
public set texture(value: ITexture2D) {
|
|
55
|
+
this._renderPipeline.spriteTexture = value;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** @inheritDoc */
|
|
59
|
+
public beforeRender(): void {
|
|
60
|
+
// Nothing to do
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** @inheritDoc */
|
|
64
|
+
public renderMesh(mesh: IRenderableMesh): void {
|
|
65
|
+
this.render(mesh.vertexBuffer!, mesh.indexBuffer!, mesh.indexCount ?? -1, mesh.indexStart ?? 0);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Renders the material.
|
|
70
|
+
* @param vertexBuffer - The vertex buffer.
|
|
71
|
+
* @param indexBuffer - The index buffer.
|
|
72
|
+
* @param indicesCount - The number of indices to draw. If -1 draws all indices.
|
|
73
|
+
* @param indicesOffset - Indices offset. Defaults to 0.
|
|
74
|
+
*/
|
|
75
|
+
public render(vertexBuffer: IVertexBuffer, indexBuffer: IIndexBuffer, indicesCount?: number, indicesOffset?: number): void {
|
|
76
|
+
this._renderPipeline.render(vertexBuffer, indexBuffer, indicesCount, indicesOffset);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** @inheritDoc */
|
|
80
|
+
public dispose(): void {
|
|
81
|
+
this._renderPipeline.dispose();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type {ICameraMaterial} from "./ICameraMaterial.ts";
|
|
1
2
|
|
|
2
|
-
import type {
|
|
3
|
+
import type {IRenderableMesh} from "../meshes/IRenderableMesh.ts";
|
|
3
4
|
import type { ITexture2D } from "../rendering/texture/ITexture2D.ts";
|
|
4
5
|
import type { ISampler } from "../rendering/sampler/ISampler.ts";
|
|
5
6
|
import {mat4} from "gl-matrix";
|
|
@@ -12,6 +13,7 @@ import {BufferUsage} from "../rendering/buffers/BufferUsage.ts";
|
|
|
12
13
|
import {Color} from "../data/Color.ts";
|
|
13
14
|
import type { IUnlitRenderPipeline } from "../rendering/render-pipelines/IUnlitRenderPipeline.ts";
|
|
14
15
|
import type { IPrimitiveState } from "../rendering/primitive/IPrimitiveState.ts";
|
|
16
|
+
import type {ICamera} from "../camera/ICamera.ts";
|
|
15
17
|
|
|
16
18
|
/** The additional material config options */
|
|
17
19
|
export class UnlitMaterialDescriptor {
|
|
@@ -19,26 +21,32 @@ export class UnlitMaterialDescriptor {
|
|
|
19
21
|
/** The primitive state. */
|
|
20
22
|
public primitiveState?: IPrimitiveState;
|
|
21
23
|
|
|
22
|
-
/** The
|
|
23
|
-
public
|
|
24
|
+
/** The camera used to render this material. */
|
|
25
|
+
public camera?: ICamera;
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
/**
|
|
28
30
|
* Unlit material.
|
|
29
31
|
*/
|
|
30
|
-
export class UnlitMaterial {
|
|
32
|
+
export class UnlitMaterial implements ICameraMaterial {
|
|
31
33
|
|
|
32
34
|
private readonly _framework: IFramework;
|
|
33
35
|
private _color = Color.white();
|
|
34
36
|
private _materialData = [1,1,1,1];
|
|
35
|
-
|
|
37
|
+
/** Created when the model buffer is assigned (the pipeline requires one). */
|
|
38
|
+
private _pipeline?: IUnlitRenderPipeline;
|
|
39
|
+
private readonly _primitiveState?: IPrimitiveState;
|
|
40
|
+
/** Texture and sampler set before the pipeline exists; applied when it is created. */
|
|
41
|
+
private _pendingTexture?: ITexture2D;
|
|
42
|
+
private _pendingSampler?: ISampler;
|
|
43
|
+
private _samplerSet = false;
|
|
36
44
|
private _projectionViewBuffer: IUniformBuffer;
|
|
37
45
|
/** False when the projection view buffer came from the descriptor. The caller owns that one. */
|
|
38
|
-
private
|
|
46
|
+
private _ownsProjectionViewBuffer: boolean;
|
|
47
|
+
private _camera?: ICamera;
|
|
39
48
|
private _materialBuffer: IUniformBuffer;
|
|
40
|
-
private _modelBuffer
|
|
41
|
-
private _previousModelMatrix = mat4.create();
|
|
49
|
+
private _modelBuffer?: IUniformBuffer;
|
|
42
50
|
|
|
43
51
|
/**
|
|
44
52
|
* The constructor.
|
|
@@ -47,18 +55,59 @@ export class UnlitMaterial {
|
|
|
47
55
|
*/
|
|
48
56
|
public constructor(framework: IFramework, config? :UnlitMaterialDescriptor) {
|
|
49
57
|
this._framework = framework;
|
|
50
|
-
void this._framework;
|
|
51
58
|
const usage = BufferUsage.UNIFORM | BufferUsage.COPY_DST;
|
|
52
|
-
this.
|
|
53
|
-
|
|
54
|
-
this.
|
|
59
|
+
this._camera = config?.camera;
|
|
60
|
+
// Without a camera an own zero buffer is bound, so rendering before the scene assigns one does not crash.
|
|
61
|
+
this._ownsProjectionViewBuffer = !config?.camera?.projectionViewBuffer;
|
|
62
|
+
this._projectionViewBuffer = config?.camera?.projectionViewBuffer ?? framework.bufferFactory.createUniformBuffer(mat4.create(), usage);
|
|
55
63
|
this._materialBuffer = framework.bufferFactory.createUniformBuffer(this._materialData, usage);
|
|
56
|
-
this.
|
|
64
|
+
this._primitiveState = config?.primitiveState;
|
|
65
|
+
// The pipeline is created once a model buffer is assigned (see modelBuffer).
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Creates the pipeline with the current bindings. */
|
|
69
|
+
private _createPipeline(modelBuffer: IUniformBuffer): IUnlitRenderPipeline {
|
|
70
|
+
const pipeline = this._framework.renderPipelineFactory.createUnlitRenderPipeline(
|
|
57
71
|
this._projectionViewBuffer,
|
|
58
|
-
|
|
72
|
+
modelBuffer,
|
|
59
73
|
this._materialBuffer,
|
|
60
|
-
|
|
74
|
+
this._primitiveState
|
|
61
75
|
);
|
|
76
|
+
if (this._pendingTexture) {
|
|
77
|
+
pipeline.diffuseTexture = this._pendingTexture;
|
|
78
|
+
}
|
|
79
|
+
if (this._samplerSet) {
|
|
80
|
+
pipeline.diffuseTextureSampler = this._pendingSampler;
|
|
81
|
+
}
|
|
82
|
+
this._pipeline = pipeline;
|
|
83
|
+
return pipeline;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* The camera. Setting it binds the camera's projection view buffer to the pipeline
|
|
88
|
+
* (the material's own placeholder buffer is disposed). Setting undefined keeps the last bound buffer.
|
|
89
|
+
*/
|
|
90
|
+
public get camera(): ICamera | undefined {
|
|
91
|
+
return this._camera;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** @inheritDoc */
|
|
95
|
+
public set camera(camera: ICamera | undefined) {
|
|
96
|
+
if (camera === this._camera) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this._camera = camera;
|
|
100
|
+
if (!camera) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (this._ownsProjectionViewBuffer) {
|
|
104
|
+
this._projectionViewBuffer.dispose();
|
|
105
|
+
this._ownsProjectionViewBuffer = false;
|
|
106
|
+
}
|
|
107
|
+
this._projectionViewBuffer = camera.projectionViewBuffer;
|
|
108
|
+
if (this._pipeline) {
|
|
109
|
+
this._pipeline.projectionViewBuffer = this._projectionViewBuffer;
|
|
110
|
+
}
|
|
62
111
|
}
|
|
63
112
|
|
|
64
113
|
/**
|
|
@@ -70,34 +119,60 @@ export class UnlitMaterial {
|
|
|
70
119
|
* The texture to inspect.
|
|
71
120
|
*/
|
|
72
121
|
public get diffuseTexture(): ITexture2D {
|
|
73
|
-
return this._pipeline.
|
|
122
|
+
return this._pipeline?.diffuseTexture ?? this._pendingTexture!;
|
|
74
123
|
}
|
|
75
124
|
|
|
76
125
|
/**
|
|
77
126
|
* The texture to inspect.
|
|
78
127
|
*/
|
|
79
128
|
public set diffuseTexture(value: ITexture2D) {
|
|
80
|
-
this.
|
|
129
|
+
this._pendingTexture = value;
|
|
130
|
+
if (this._pipeline) {
|
|
131
|
+
this._pipeline.diffuseTexture = value;
|
|
132
|
+
}
|
|
81
133
|
}
|
|
82
134
|
|
|
83
135
|
/**
|
|
84
136
|
* The texture sampler.
|
|
85
137
|
*/
|
|
86
138
|
public get diffuseTextureSampler(): ISampler | undefined {
|
|
87
|
-
return this._pipeline.diffuseTextureSampler;
|
|
139
|
+
return this._pipeline ? this._pipeline.diffuseTextureSampler : this._pendingSampler;
|
|
88
140
|
}
|
|
89
141
|
|
|
90
142
|
/**
|
|
91
143
|
* The texture sampler.
|
|
92
144
|
*/
|
|
93
145
|
public set diffuseTextureSampler(value: ISampler | undefined) {
|
|
94
|
-
this.
|
|
146
|
+
this._pendingSampler = value;
|
|
147
|
+
this._samplerSet = true;
|
|
148
|
+
if (this._pipeline) {
|
|
149
|
+
this._pipeline.diffuseTextureSampler = value;
|
|
150
|
+
}
|
|
95
151
|
}
|
|
96
152
|
|
|
97
153
|
/**
|
|
98
|
-
* The model
|
|
154
|
+
* The model buffer (std140 `mat4`). Owned by the mesh, which assigns it before drawing; never disposed by this material.
|
|
155
|
+
* Undefined until assigned: rendering without one throws.
|
|
99
156
|
*/
|
|
100
|
-
public
|
|
157
|
+
public get modelBuffer(): IUniformBuffer | undefined {
|
|
158
|
+
return this._modelBuffer;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** Binds the model buffer to the pipeline. */
|
|
162
|
+
public set modelBuffer(value: IUniformBuffer | undefined) {
|
|
163
|
+
if (value === this._modelBuffer) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
this._modelBuffer = value;
|
|
167
|
+
if (!value) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (this._pipeline) {
|
|
171
|
+
this._pipeline.modelBuffer = value;
|
|
172
|
+
} else {
|
|
173
|
+
this._createPipeline(value);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
101
176
|
|
|
102
177
|
/**
|
|
103
178
|
* The geometry format.
|
|
@@ -114,30 +189,28 @@ export class UnlitMaterial {
|
|
|
114
189
|
this._materialData[3] = this._color.a;
|
|
115
190
|
this._materialBuffer.update(this._materialData);
|
|
116
191
|
}
|
|
117
|
-
|
|
118
|
-
if (!mat4.equals(this._previousModelMatrix, this.modelMatrix)) {
|
|
119
|
-
mat4.copy(this._previousModelMatrix, this.modelMatrix);
|
|
120
|
-
this._modelBuffer.update(this._previousModelMatrix);
|
|
121
|
-
}
|
|
122
192
|
}
|
|
123
193
|
|
|
124
194
|
/** @inheritDoc */
|
|
125
|
-
public renderMesh(mesh:
|
|
126
|
-
this.render(mesh.vertexBuffer!, mesh.indexBuffer
|
|
195
|
+
public renderMesh(mesh: IRenderableMesh): void {
|
|
196
|
+
this.render(mesh.vertexBuffer!, mesh.indexBuffer!, mesh.indexCount ?? -1, mesh.indexStart ?? 0);
|
|
127
197
|
}
|
|
128
198
|
|
|
129
199
|
/** @inheritDoc */
|
|
130
|
-
public render(vertexBuffer: IVertexBuffer, indexBuffer: IIndexBuffer): void {
|
|
131
|
-
this.
|
|
200
|
+
public render(vertexBuffer: IVertexBuffer, indexBuffer: IIndexBuffer, indicesCount?: number, indicesOffset?: number): void {
|
|
201
|
+
if (!this._modelBuffer) {
|
|
202
|
+
throw new Error("UnlitMaterial: no modelBuffer. Render it through a mesh (the mesh assigns its model buffer) or set material.modelBuffer.");
|
|
203
|
+
}
|
|
204
|
+
(this._pipeline ?? this._createPipeline(this._modelBuffer)).render(vertexBuffer, indexBuffer, indicesCount, indicesOffset);
|
|
132
205
|
}
|
|
133
206
|
|
|
134
207
|
/** @inheritDoc */
|
|
135
208
|
public dispose(): void {
|
|
136
|
-
this._pipeline
|
|
209
|
+
this._pipeline?.dispose();
|
|
210
|
+
this._pipeline = undefined;
|
|
137
211
|
if (this._ownsProjectionViewBuffer) {
|
|
138
212
|
this._projectionViewBuffer.dispose();
|
|
139
213
|
}
|
|
140
|
-
this._modelBuffer.dispose();
|
|
141
214
|
this._materialBuffer.dispose();
|
|
142
215
|
}
|
|
143
216
|
}
|
|
@@ -2,4 +2,8 @@ export * from "./IMaterial.ts"
|
|
|
2
2
|
export * from "./IMaterialFactory.ts"
|
|
3
3
|
export * from "./InspectTextureMipsMaterial.ts"
|
|
4
4
|
export * from "./MaterialFactory.ts"
|
|
5
|
-
export * from "./
|
|
5
|
+
export * from "./SpriteMaterial.ts"
|
|
6
|
+
export * from "./UnlitMaterial.ts"
|
|
7
|
+
export * from "./ForwardBlinnPhongMaterial.ts"
|
|
8
|
+
export * from "./ICameraMaterial.ts"
|
|
9
|
+
export * from "./ILightsMaterial.ts"
|
package/src/api/meshes/IMesh.ts
CHANGED
|
@@ -1,20 +1,54 @@
|
|
|
1
1
|
import type { IVertexBuffer } from "../rendering/buffers/IVertexBuffer.ts";
|
|
2
2
|
import type { IDisposable } from "../core/IDisposable.ts";
|
|
3
3
|
import type { IIndexBuffer } from "../rendering/buffers/IIndexBuffer.ts";
|
|
4
|
+
import type { IGeometry } from "../geometry/IGeometry.ts";
|
|
5
|
+
import type { GeometryFormat } from "../geometry/GeometryFormat.ts";
|
|
6
|
+
import type { State } from "../data/State.ts";
|
|
4
7
|
|
|
5
8
|
/**
|
|
6
|
-
*
|
|
9
|
+
* A mesh: geometry and the vertex and index buffers created from it.
|
|
10
|
+
* It has no material and no transform; see {@link IRenderableMesh} for a mesh that can be drawn.
|
|
11
|
+
* @public
|
|
7
12
|
*/
|
|
8
13
|
export interface IMesh extends IDisposable {
|
|
9
14
|
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
|
|
15
|
+
/** The state of the mesh. */
|
|
16
|
+
readonly state: State;
|
|
17
|
+
|
|
18
|
+
/** The positions, when set through `setMesh`. */
|
|
19
|
+
readonly positions?: number[];
|
|
20
|
+
|
|
21
|
+
/** The colors, when set through `setMesh`. */
|
|
22
|
+
readonly colors?: number[];
|
|
23
|
+
|
|
24
|
+
/** The texture coordinates, when set through `setMesh`. */
|
|
25
|
+
readonly textureCoords?: number[];
|
|
26
|
+
|
|
27
|
+
/** The normals, when set through `setMesh`. */
|
|
28
|
+
readonly normals?: number[];
|
|
29
|
+
|
|
30
|
+
/** The indices, when set through `setMesh`. */
|
|
31
|
+
readonly indices?: number[];
|
|
32
|
+
|
|
33
|
+
/** The geometry the buffers were created from with `setGeometry`, if any. */
|
|
34
|
+
readonly geometry?: IGeometry;
|
|
35
|
+
|
|
36
|
+
/** The vertex buffer, if created. */
|
|
13
37
|
readonly vertexBuffer?: IVertexBuffer;
|
|
14
38
|
|
|
39
|
+
/** The index buffer, if created. */
|
|
40
|
+
readonly indexBuffer?: IIndexBuffer;
|
|
41
|
+
|
|
42
|
+
/** Creates the buffers from the current data. */
|
|
43
|
+
initialize(): void;
|
|
44
|
+
|
|
15
45
|
/**
|
|
16
|
-
*
|
|
46
|
+
* Creates the vertex and index buffers from a geometry.
|
|
47
|
+
* @param geometry The geometry.
|
|
48
|
+
* @param geometryFormat The vertex layout.
|
|
17
49
|
*/
|
|
18
|
-
|
|
50
|
+
setGeometry(geometry: IGeometry, geometryFormat?: GeometryFormat): void;
|
|
19
51
|
|
|
52
|
+
/** Re-creates (or updates) the buffers from the current data. */
|
|
53
|
+
applyChanges(): void;
|
|
20
54
|
}
|
|
@@ -1,8 +1,20 @@
|
|
|
1
|
+
import type { GeometryFormat } from "../geometry/GeometryFormat.ts";
|
|
1
2
|
import type { IGeometry } from "../geometry/IGeometry.ts";
|
|
2
|
-
import {GeometryFormat} from "../geometry/GeometryFormat.ts";
|
|
3
3
|
import {QuadMesh} from "./QuadMesh.ts";
|
|
4
4
|
import {vec2} from "gl-matrix";
|
|
5
5
|
import type { IMesh } from "./IMesh.ts";
|
|
6
|
+
import type { IMaterial } from "../material/IMaterial.ts";
|
|
7
|
+
import type { IRenderableMesh } from "./IRenderableMesh.ts";
|
|
8
|
+
|
|
9
|
+
/** Describes one submesh: a material and the index range it draws. */
|
|
10
|
+
export interface SubMeshDescriptor {
|
|
11
|
+
/** The material. */
|
|
12
|
+
readonly material: IMaterial;
|
|
13
|
+
/** The first index of the range. */
|
|
14
|
+
readonly indexStart: number;
|
|
15
|
+
/** The number of indices in the range. */
|
|
16
|
+
readonly indexCount: number;
|
|
17
|
+
}
|
|
6
18
|
|
|
7
19
|
/**
|
|
8
20
|
* The mesh factory.
|
|
@@ -10,12 +22,29 @@ import type { IMesh } from "./IMesh.ts";
|
|
|
10
22
|
export interface IMeshFactory {
|
|
11
23
|
|
|
12
24
|
/**
|
|
13
|
-
* Creates a mesh.
|
|
25
|
+
* Creates a plain mesh (buffers only, no material or transform) from a geometry.
|
|
26
|
+
* @param geometry - The geometry.
|
|
27
|
+
* @param geometryFormat - The vertex layout.
|
|
28
|
+
* @returns The mesh.
|
|
29
|
+
*/
|
|
30
|
+
createMesh(geometry: IGeometry, geometryFormat: GeometryFormat): IMesh;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Creates a renderable mesh with one material. Add it to a scene with `scene.add(mesh)`.
|
|
34
|
+
* @param geometry - The geometry.
|
|
35
|
+
* @param material - The material.
|
|
36
|
+
* @returns The mesh.
|
|
37
|
+
*/
|
|
38
|
+
create(geometry: IGeometry, material: IMaterial): IRenderableMesh;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Creates a mesh made of submeshes that share one vertex and one index buffer.
|
|
42
|
+
* The root mesh has no material; `mesh.render()` draws its submeshes. Add the root to a scene with `scene.add(mesh)`.
|
|
14
43
|
* @param geometry - The geometry.
|
|
15
|
-
* @param
|
|
44
|
+
* @param subMeshes - One entry per submesh. All materials must use the same geometry format.
|
|
16
45
|
* @returns The mesh.
|
|
17
46
|
*/
|
|
18
|
-
|
|
47
|
+
createWithSubMeshes(geometry: IGeometry, subMeshes: SubMeshDescriptor[]): IRenderableMesh;
|
|
19
48
|
|
|
20
49
|
/**
|
|
21
50
|
* Creates the quad mesh.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { mat4, vec3 } from "gl-matrix";
|
|
2
|
+
import type { IMesh } from "./IMesh.ts";
|
|
3
|
+
import type { IMaterial } from "../material/IMaterial.ts";
|
|
4
|
+
import type { IUniformBuffer } from "../rendering/buffers/IUniformBuffer.ts";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A mesh that can be drawn: a mesh plus an optional material, an index range and sub meshes.
|
|
8
|
+
*
|
|
9
|
+
* - A root mesh owns the vertex and index buffers. Sub meshes share them and only store their index range.
|
|
10
|
+
* - Rendering: a mesh with a material draws its range, then its sub meshes draw theirs.
|
|
11
|
+
* A root without a material only draws its sub meshes.
|
|
12
|
+
* - The transform (position, rotation, scale) and the model buffer live on the root and are shared by all sub meshes,
|
|
13
|
+
* so a mesh uploads its model matrix once per change, whatever the number of materials.
|
|
14
|
+
* - Disposing the root disposes the sub meshes and the buffers once. Materials are not disposed by the mesh
|
|
15
|
+
* (a `SceneMesh` does that).
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
export interface IRenderableMesh extends IMesh {
|
|
19
|
+
|
|
20
|
+
/** The material, if any. A root mesh made only of sub meshes has none. */
|
|
21
|
+
material?: IMaterial;
|
|
22
|
+
|
|
23
|
+
/** The parent for a sub mesh; undefined for a root mesh. */
|
|
24
|
+
readonly parent?: IRenderableMesh;
|
|
25
|
+
|
|
26
|
+
/** The sub meshes. */
|
|
27
|
+
readonly subMeshes: readonly IRenderableMesh[];
|
|
28
|
+
|
|
29
|
+
/** First index of the range to draw. Defaults to 0. */
|
|
30
|
+
readonly indexStart: number;
|
|
31
|
+
|
|
32
|
+
/** Number of indices to draw; -1 (the default) draws all indices. */
|
|
33
|
+
readonly indexCount: number;
|
|
34
|
+
|
|
35
|
+
/** World position. Defaults to the origin. In-place edits are detected. A sub mesh uses the root's. */
|
|
36
|
+
position: vec3;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Euler rotation in radians, applied in Y, X, Z order (yaw, pitch, roll): `R = Ry * Rx * Rz`.
|
|
40
|
+
* Defaults to (0, 0, 0). In-place edits are detected. A sub mesh uses the root's.
|
|
41
|
+
*/
|
|
42
|
+
rotation: vec3;
|
|
43
|
+
|
|
44
|
+
/** Scale. Defaults to (1, 1, 1). In-place edits are detected. A sub mesh uses the root's. */
|
|
45
|
+
scale: vec3;
|
|
46
|
+
|
|
47
|
+
/** The model matrix `T * R * S`, recomputed only when position, rotation or scale changed. */
|
|
48
|
+
readonly modelMatrix: mat4;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The model buffer (std140 `mat4`) holding {@link modelMatrix}. Owned by the root mesh (sub meshes share it),
|
|
52
|
+
* uploaded when the transform changed and assigned to the material(s) before drawing. Created on first use.
|
|
53
|
+
*/
|
|
54
|
+
readonly modelBuffer: IUniformBuffer;
|
|
55
|
+
|
|
56
|
+
/** Draws the mesh's range with its material (if any), then the sub meshes. */
|
|
57
|
+
render(): void;
|
|
58
|
+
}
|