@bloopjs/toodle 0.0.100
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/LICENSE +21 -0
- package/README.md +44 -0
- package/dist/Toodle.d.ts +304 -0
- package/dist/Toodle.d.ts.map +1 -0
- package/dist/colors/mod.d.ts +872 -0
- package/dist/colors/mod.d.ts.map +1 -0
- package/dist/coreTypes/Color.d.ts +7 -0
- package/dist/coreTypes/Color.d.ts.map +1 -0
- package/dist/coreTypes/Point.d.ts +8 -0
- package/dist/coreTypes/Point.d.ts.map +1 -0
- package/dist/coreTypes/Size.d.ts +5 -0
- package/dist/coreTypes/Size.d.ts.map +1 -0
- package/dist/coreTypes/Transform.d.ts +16 -0
- package/dist/coreTypes/Transform.d.ts.map +1 -0
- package/dist/coreTypes/Vec2.d.ts +8 -0
- package/dist/coreTypes/Vec2.d.ts.map +1 -0
- package/dist/coreTypes/mod.d.ts +6 -0
- package/dist/coreTypes/mod.d.ts.map +1 -0
- package/dist/docs/snippets/add-remove-children.d.ts +1 -0
- package/dist/docs/snippets/basic-quad.d.ts +1 -0
- package/dist/docs/snippets/filter-linear.d.ts +1 -0
- package/dist/docs/snippets/filter-nearest.d.ts +1 -0
- package/dist/docs/snippets/flipxy.d.ts +1 -0
- package/dist/docs/snippets/hello-text.d.ts +1 -0
- package/dist/docs/snippets/jumbo-textures.d.ts +1 -0
- package/dist/docs/snippets/layer.d.ts +1 -0
- package/dist/docs/snippets/layout-edges.d.ts +1 -0
- package/dist/docs/snippets/layout-screen-and-world-space.d.ts +1 -0
- package/dist/docs/snippets/postprocess.d.ts +1 -0
- package/dist/docs/snippets/quad-size-scale.d.ts +1 -0
- package/dist/docs/snippets/quickstart.d.ts +1 -0
- package/dist/docs/snippets/repeat-texture-loading.d.ts +1 -0
- package/dist/docs/snippets/screen-shaders.d.ts +1 -0
- package/dist/docs/snippets/shader-color-flash.d.ts +1 -0
- package/dist/docs/snippets/shader-default.d.ts +1 -0
- package/dist/docs/snippets/shader-fill.d.ts +1 -0
- package/dist/docs/snippets/shapes-line.d.ts +1 -0
- package/dist/docs/snippets/sprite-region.d.ts +1 -0
- package/dist/docs/snippets/text-alignment.d.ts +1 -0
- package/dist/docs/snippets/text-shrink-to-fit.d.ts +1 -0
- package/dist/docs/snippets/text-word-wrap.d.ts +1 -0
- package/dist/docs/snippets/texture-bundles-prebaked.d.ts +1 -0
- package/dist/docs/snippets/texture-bundles.d.ts +1 -0
- package/dist/docs/snippets/transforms.d.ts +1 -0
- package/dist/docs/snippets/transparent-cropping.d.ts +1 -0
- package/dist/examples/0-hello.d.ts +1 -0
- package/dist/examples/1-hello.d.ts +1 -0
- package/dist/examples/1-hello.d.ts.map +1 -0
- package/dist/examples/1-quad.d.ts +1 -0
- package/dist/examples/10-resize.d.ts +1 -0
- package/dist/examples/10-resize.d.ts.map +1 -0
- package/dist/examples/11-bundle-test.d.ts +1 -0
- package/dist/examples/11-bundle-test.d.ts.map +1 -0
- package/dist/examples/12-transparent-pixel-cropping.d.ts +1 -0
- package/dist/examples/12-transparent-pixel-cropping.d.ts.map +1 -0
- package/dist/examples/13-crop.d.ts +1 -0
- package/dist/examples/13-crop.d.ts.map +1 -0
- package/dist/examples/14-bundle-bench.d.ts +1 -0
- package/dist/examples/14-bundle-bench.d.ts.map +1 -0
- package/dist/examples/15-text-layer.d.ts +1 -0
- package/dist/examples/15-text-layer.d.ts.map +1 -0
- package/dist/examples/16-jumbo-texture.d.ts +1 -0
- package/dist/examples/16-jumbo-textures.d.ts +1 -0
- package/dist/examples/16-screen-shader.d.ts +1 -0
- package/dist/examples/16-screen-shader.d.ts.map +1 -0
- package/dist/examples/17-lighting.d.ts +1 -0
- package/dist/examples/17-lighting.d.ts.map +1 -0
- package/dist/examples/17-translations.d.ts +1 -0
- package/dist/examples/18-blur.d.ts +1 -0
- package/dist/examples/19-postprocess.d.ts +1 -0
- package/dist/examples/19-screenshader.d.ts +1 -0
- package/dist/examples/2-shapes.d.ts +1 -0
- package/dist/examples/2-shapes.d.ts.map +1 -0
- package/dist/examples/3-shader.d.ts +1 -0
- package/dist/examples/3-shader.d.ts.map +1 -0
- package/dist/examples/4-shader-bench.d.ts +1 -0
- package/dist/examples/4-shader-bench.d.ts.map +1 -0
- package/dist/examples/5-z.d.ts +1 -0
- package/dist/examples/5-z.d.ts.map +1 -0
- package/dist/examples/6-atlas.d.ts +1 -0
- package/dist/examples/6-atlas.d.ts.map +1 -0
- package/dist/examples/7-text.d.ts +1 -0
- package/dist/examples/7-text.d.ts.map +1 -0
- package/dist/examples/8-text-bench.d.ts +1 -0
- package/dist/examples/8-text-bench.d.ts.map +1 -0
- package/dist/examples/9-alignment.d.ts +1 -0
- package/dist/examples/9-alignment.d.ts.map +1 -0
- package/dist/examples/main.d.ts +1 -0
- package/dist/examples/main.d.ts.map +1 -0
- package/dist/examples/util.d.ts +82 -0
- package/dist/examples/util.d.ts.map +1 -0
- package/dist/limits.d.ts +23 -0
- package/dist/limits.d.ts.map +1 -0
- package/dist/math/angle.d.ts +13 -0
- package/dist/math/angle.d.ts.map +1 -0
- package/dist/math/matrix.d.ts +26 -0
- package/dist/math/matrix.d.ts.map +1 -0
- package/dist/math/mod.d.ts +3 -0
- package/dist/math/mod.d.ts.map +1 -0
- package/dist/mod.d.ts +17 -0
- package/dist/mod.d.ts.map +1 -0
- package/dist/mod.js +19665 -0
- package/dist/mod.js.map +41 -0
- package/dist/postprocess.d.ts +10 -0
- package/dist/postprocess.d.ts.map +1 -0
- package/dist/scene/Batcher.d.ts +20 -0
- package/dist/scene/Batcher.d.ts.map +1 -0
- package/dist/scene/Camera.d.ts +16 -0
- package/dist/scene/Camera.d.ts.map +1 -0
- package/dist/scene/JumboQuadNode.d.ts +29 -0
- package/dist/scene/JumboQuadNode.d.ts.map +1 -0
- package/dist/scene/QuadNode.d.ts +159 -0
- package/dist/scene/QuadNode.d.ts.map +1 -0
- package/dist/scene/RenderComponent.d.ts +11 -0
- package/dist/scene/RenderComponent.d.ts.map +1 -0
- package/dist/scene/SceneNode.d.ts +300 -0
- package/dist/scene/SceneNode.d.ts.map +1 -0
- package/dist/scene/mod.d.ts +5 -0
- package/dist/scene/mod.d.ts.map +1 -0
- package/dist/screen/mod.d.ts +2 -0
- package/dist/screen/mod.d.ts.map +1 -0
- package/dist/screen/resolution.d.ts +5 -0
- package/dist/screen/resolution.d.ts.map +1 -0
- package/dist/shaders/EngineUniform.d.ts +9 -0
- package/dist/shaders/EngineUniform.d.ts.map +1 -0
- package/dist/shaders/IShader.d.ts +15 -0
- package/dist/shaders/IShader.d.ts.map +1 -0
- package/dist/shaders/QuadShader.d.ts +18 -0
- package/dist/shaders/QuadShader.d.ts.map +1 -0
- package/dist/shaders/ShaderDescriptor.d.ts +7 -0
- package/dist/shaders/ShaderDescriptor.d.ts.map +1 -0
- package/dist/shaders/mod.d.ts +6 -0
- package/dist/shaders/mod.d.ts.map +1 -0
- package/dist/shaders/parser.d.ts +8 -0
- package/dist/shaders/parser.d.ts.map +1 -0
- package/dist/shaders/postprocess/blur.d.ts +3 -0
- package/dist/shaders/postprocess/blur.d.ts.map +1 -0
- package/dist/shaders/postprocess/mod.d.ts +17 -0
- package/dist/shaders/postprocess/mod.d.ts.map +1 -0
- package/dist/shaders/samplers.d.ts +3 -0
- package/dist/shaders/samplers.d.ts.map +1 -0
- package/dist/shaders/wgsl/example.wgsl.d.ts +3 -0
- package/dist/shaders/wgsl/example.wgsl.d.ts.map +1 -0
- package/dist/shaders/wgsl/hello.wgsl.d.ts +3 -0
- package/dist/shaders/wgsl/hello.wgsl.d.ts.map +1 -0
- package/dist/shaders/wgsl/helloInstanced.wgsl.d.ts +3 -0
- package/dist/shaders/wgsl/helloInstanced.wgsl.d.ts.map +1 -0
- package/dist/shaders/wgsl/quad.wgsl.d.ts +3 -0
- package/dist/shaders/wgsl/quad.wgsl.d.ts.map +1 -0
- package/dist/src/Toodle.d.ts +303 -0
- package/dist/src/Toodle.d.ts.map +1 -0
- package/dist/src/colors/mod.d.ts +871 -0
- package/dist/src/coreTypes/Color.d.ts +6 -0
- package/dist/src/coreTypes/Color.d.ts.map +1 -0
- package/dist/src/coreTypes/Point.d.ts +7 -0
- package/dist/src/coreTypes/Point.d.ts.map +1 -0
- package/dist/src/coreTypes/Size.d.ts +4 -0
- package/dist/src/coreTypes/Size.d.ts.map +1 -0
- package/dist/src/coreTypes/Transform.d.ts +15 -0
- package/dist/src/coreTypes/Transform.d.ts.map +1 -0
- package/dist/src/coreTypes/Vec2.d.ts +7 -0
- package/dist/src/coreTypes/Vec2.d.ts.map +1 -0
- package/dist/src/coreTypes/mod.d.ts +5 -0
- package/dist/src/coreTypes/mod.d.ts.map +1 -0
- package/dist/src/limits.d.ts +22 -0
- package/dist/src/limits.d.ts.map +1 -0
- package/dist/src/math/angle.d.ts +12 -0
- package/dist/src/math/angle.d.ts.map +1 -0
- package/dist/src/math/matrix.d.ts +25 -0
- package/dist/src/math/matrix.d.ts.map +1 -0
- package/dist/src/math/mod.d.ts +2 -0
- package/dist/src/math/mod.d.ts.map +1 -0
- package/dist/src/mod.d.ts +16 -0
- package/dist/src/mod.d.ts.map +1 -0
- package/dist/src/postprocess.d.ts +10 -0
- package/dist/src/postprocess.d.ts.map +1 -0
- package/dist/src/scene/Batcher.d.ts +19 -0
- package/dist/src/scene/Batcher.d.ts.map +1 -0
- package/dist/src/scene/Camera.d.ts +15 -0
- package/dist/src/scene/Camera.d.ts.map +1 -0
- package/dist/src/scene/JumboQuadNode.d.ts +28 -0
- package/dist/src/scene/QuadNode.d.ts +158 -0
- package/dist/src/scene/QuadNode.d.ts.map +1 -0
- package/dist/src/scene/RenderComponent.d.ts +10 -0
- package/dist/src/scene/RenderComponent.d.ts.map +1 -0
- package/dist/src/scene/SceneNode.d.ts +299 -0
- package/dist/src/scene/SceneNode.d.ts.map +1 -0
- package/dist/src/scene/mod.d.ts +4 -0
- package/dist/src/scene/mod.d.ts.map +1 -0
- package/dist/src/screen/mod.d.ts +1 -0
- package/dist/src/screen/mod.d.ts.map +1 -0
- package/dist/src/screen/resolution.d.ts +4 -0
- package/dist/src/screen/resolution.d.ts.map +1 -0
- package/dist/src/shaders/EngineUniform.d.ts +8 -0
- package/dist/src/shaders/EngineUniform.d.ts.map +1 -0
- package/dist/src/shaders/IShader.d.ts +14 -0
- package/dist/src/shaders/IShader.d.ts.map +1 -0
- package/dist/src/shaders/QuadShader.d.ts +17 -0
- package/dist/src/shaders/QuadShader.d.ts.map +1 -0
- package/dist/src/shaders/ShaderDescriptor.d.ts +6 -0
- package/dist/src/shaders/ShaderDescriptor.d.ts.map +1 -0
- package/dist/src/shaders/mod.d.ts +5 -0
- package/dist/src/shaders/mod.d.ts.map +1 -0
- package/dist/src/shaders/parser.d.ts +7 -0
- package/dist/src/shaders/parser.d.ts.map +1 -0
- package/dist/src/shaders/postprocess/blur.d.ts +2 -0
- package/dist/src/shaders/postprocess/mod.d.ts +16 -0
- package/dist/src/shaders/postprocess/postprocess.d.ts +8 -0
- package/dist/src/shaders/postprocess/util.d.ts +2 -0
- package/dist/src/shaders/samplers.d.ts +2 -0
- package/dist/src/shaders/samplers.d.ts.map +1 -0
- package/dist/src/shaders/wgsl/example.wgsl.d.ts +2 -0
- package/dist/src/shaders/wgsl/example.wgsl.d.ts.map +1 -0
- package/dist/src/shaders/wgsl/hello.wgsl.d.ts +2 -0
- package/dist/src/shaders/wgsl/hello.wgsl.d.ts.map +1 -0
- package/dist/src/shaders/wgsl/helloInstanced.wgsl.d.ts +2 -0
- package/dist/src/shaders/wgsl/helloInstanced.wgsl.d.ts.map +1 -0
- package/dist/src/shaders/wgsl/quad.wgsl.d.ts +2 -0
- package/dist/src/shaders/wgsl/quad.wgsl.d.ts.map +1 -0
- package/dist/src/text/FontPipeline.d.ts +13 -0
- package/dist/src/text/FontPipeline.d.ts.map +1 -0
- package/dist/src/text/MsdfFont.d.ts +81 -0
- package/dist/src/text/MsdfFont.d.ts.map +1 -0
- package/dist/src/text/TextFormatting.d.ts +18 -0
- package/dist/src/text/TextFormatting.d.ts.map +1 -0
- package/dist/src/text/TextNode.d.ts +18 -0
- package/dist/src/text/TextNode.d.ts.map +1 -0
- package/dist/src/text/TextShader.d.ts +14 -0
- package/dist/src/text/TextShader.d.ts.map +1 -0
- package/dist/src/text/mod.d.ts +3 -0
- package/dist/src/text/mod.d.ts.map +1 -0
- package/dist/src/text/shaping.d.ts +38 -0
- package/dist/src/text/shaping.d.ts.map +1 -0
- package/dist/src/text/text.wgsl.d.ts +2 -0
- package/dist/src/text/text.wgsl.d.ts.map +1 -0
- package/dist/src/textures/AssetManager.d.ts +181 -0
- package/dist/src/textures/AssetManager.d.ts.map +1 -0
- package/dist/src/textures/NewTextureComputeShader.d.ts +28 -0
- package/dist/src/textures/TextureComputeShader.d.ts +20 -0
- package/dist/src/textures/TextureComputeShader.d.ts.map +1 -0
- package/dist/src/textures/crop.wgsl.d.ts +2 -0
- package/dist/src/textures/mod.d.ts +1 -0
- package/dist/src/textures/mod.d.ts.map +1 -0
- package/dist/src/textures/pixel-scraping.wgsl.d.ts +2 -0
- package/dist/src/textures/pixel-scraping.wgsl.d.ts.map +1 -0
- package/dist/src/textures/texture-processing.wgsl.d.ts +2 -0
- package/dist/src/textures/types.d.ts +176 -0
- package/dist/src/textures/types.d.ts.map +1 -0
- package/dist/src/textures/util.d.ts +7 -0
- package/dist/src/textures/util.d.ts.map +1 -0
- package/dist/src/utils/assert.d.ts +1 -0
- package/dist/src/utils/assert.d.ts.map +1 -0
- package/dist/src/utils/boilerplate.d.ts +10 -0
- package/dist/src/utils/boilerplate.d.ts.map +1 -0
- package/dist/src/utils/error.d.ts +7 -0
- package/dist/src/utils/error.d.ts.map +1 -0
- package/dist/src/utils/mod.d.ts +2 -0
- package/dist/src/utils/mod.d.ts.map +1 -0
- package/dist/src/utils/pool.d.ts +22 -0
- package/dist/src/utils/pool.d.ts.map +1 -0
- package/dist/test/math/matrix.test.d.ts +1 -0
- package/dist/test/scene/Batcher.test.d.ts +1 -0
- package/dist/test/scene/SceneNode.test.d.ts +1 -0
- package/dist/test/shader/parser.test.d.ts +1 -0
- package/dist/text/FontPipeline.d.ts +14 -0
- package/dist/text/FontPipeline.d.ts.map +1 -0
- package/dist/text/MsdfFont.d.ts +82 -0
- package/dist/text/MsdfFont.d.ts.map +1 -0
- package/dist/text/TextFormatting.d.ts +19 -0
- package/dist/text/TextFormatting.d.ts.map +1 -0
- package/dist/text/TextNode.d.ts +19 -0
- package/dist/text/TextNode.d.ts.map +1 -0
- package/dist/text/TextShader.d.ts +15 -0
- package/dist/text/TextShader.d.ts.map +1 -0
- package/dist/text/mod.d.ts +4 -0
- package/dist/text/mod.d.ts.map +1 -0
- package/dist/text/shaping.d.ts +39 -0
- package/dist/text/shaping.d.ts.map +1 -0
- package/dist/text/text.wgsl.d.ts +3 -0
- package/dist/text/text.wgsl.d.ts.map +1 -0
- package/dist/textures/AssetManager.d.ts +182 -0
- package/dist/textures/AssetManager.d.ts.map +1 -0
- package/dist/textures/TextureComputeShader.d.ts +21 -0
- package/dist/textures/TextureComputeShader.d.ts.map +1 -0
- package/dist/textures/mod.d.ts +2 -0
- package/dist/textures/mod.d.ts.map +1 -0
- package/dist/textures/pixel-scraping.wgsl.d.ts +3 -0
- package/dist/textures/pixel-scraping.wgsl.d.ts.map +1 -0
- package/dist/textures/types.d.ts +177 -0
- package/dist/textures/types.d.ts.map +1 -0
- package/dist/textures/util.d.ts +8 -0
- package/dist/textures/util.d.ts.map +1 -0
- package/dist/utils/assert.d.ts +2 -0
- package/dist/utils/assert.d.ts.map +1 -0
- package/dist/utils/boilerplate.d.ts +11 -0
- package/dist/utils/boilerplate.d.ts.map +1 -0
- package/dist/utils/error.d.ts +8 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/mod.d.ts +3 -0
- package/dist/utils/mod.d.ts.map +1 -0
- package/dist/utils/pool.d.ts +23 -0
- package/dist/utils/pool.d.ts.map +1 -0
- package/package.json +47 -0
- package/src/Toodle.ts +853 -0
- package/src/colors/mod.ts +151 -0
- package/src/coreTypes/Color.ts +1 -0
- package/src/coreTypes/Point.ts +7 -0
- package/src/coreTypes/Size.ts +4 -0
- package/src/coreTypes/Transform.ts +16 -0
- package/src/coreTypes/Vec2.ts +7 -0
- package/src/coreTypes/mod.ts +5 -0
- package/src/globals.d.ts +4 -0
- package/src/limits.ts +23 -0
- package/src/math/angle.ts +17 -0
- package/src/math/matrix.ts +99 -0
- package/src/math/mod.ts +2 -0
- package/src/mod.ts +22 -0
- package/src/scene/Batcher.ts +61 -0
- package/src/scene/Camera.ts +69 -0
- package/src/scene/JumboQuadNode.ts +219 -0
- package/src/scene/QuadNode.ts +403 -0
- package/src/scene/RenderComponent.ts +12 -0
- package/src/scene/SceneNode.ts +668 -0
- package/src/scene/mod.ts +4 -0
- package/src/screen/mod.ts +1 -0
- package/src/screen/resolution.ts +1 -0
- package/src/shaders/EngineUniform.ts +11 -0
- package/src/shaders/IShader.ts +20 -0
- package/src/shaders/QuadShader.ts +288 -0
- package/src/shaders/ShaderDescriptor.ts +6 -0
- package/src/shaders/mod.ts +5 -0
- package/src/shaders/parser.ts +221 -0
- package/src/shaders/postprocess/blur.ts +245 -0
- package/src/shaders/postprocess/mod.ts +71 -0
- package/src/shaders/samplers.ts +13 -0
- package/src/shaders/wgsl/example.wgsl.ts +24 -0
- package/src/shaders/wgsl/hello.wgsl.ts +62 -0
- package/src/shaders/wgsl/helloInstanced.wgsl.ts +46 -0
- package/src/shaders/wgsl/quad.wgsl.ts +140 -0
- package/src/text/FontPipeline.ts +212 -0
- package/src/text/MsdfFont.ts +190 -0
- package/src/text/TextFormatting.ts +28 -0
- package/src/text/TextNode.ts +82 -0
- package/src/text/TextShader.ts +223 -0
- package/src/text/mod.ts +8 -0
- package/src/text/shaping.ts +280 -0
- package/src/text/text.wgsl.ts +149 -0
- package/src/textures/AssetManager.ts +746 -0
- package/src/textures/TextureComputeShader.ts +434 -0
- package/src/textures/mod.ts +1 -0
- package/src/textures/pixel-scraping.wgsl.ts +131 -0
- package/src/textures/types.ts +182 -0
- package/src/textures/util.ts +352 -0
- package/src/utils/assert.ts +5 -0
- package/src/utils/boilerplate.ts +110 -0
- package/src/utils/error.ts +14 -0
- package/src/utils/mod.ts +2 -0
- package/src/utils/pool.ts +42 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Named colors from the web for easier prototyping than using hex codes or rgba values.
|
|
3
|
+
*
|
|
4
|
+
* https://www.w3schools.com/colors/colors_names.asp
|
|
5
|
+
*/
|
|
6
|
+
export const web = Object.freeze({
|
|
7
|
+
aliceBlue: { r: 0.941176, g: 0.972549, b: 1, a: 1 },
|
|
8
|
+
antiqueWhite: { r: 0.980392, g: 0.921569, b: 0.843137, a: 1 },
|
|
9
|
+
aqua: { r: 0, g: 1, b: 1, a: 1 },
|
|
10
|
+
aquamarine: { r: 0.498039, g: 1, b: 0.831373, a: 1 },
|
|
11
|
+
azure: { r: 0.941176, g: 1, b: 1, a: 1 },
|
|
12
|
+
beige: { r: 0.960784, g: 0.960784, b: 0.862745, a: 1 },
|
|
13
|
+
bisque: { r: 1, g: 0.894118, b: 0.768627, a: 1 },
|
|
14
|
+
black: { r: 0, g: 0, b: 0, a: 1 },
|
|
15
|
+
blanchedAlmond: { r: 1, g: 0.921569, b: 0.803922, a: 1 },
|
|
16
|
+
blue: { r: 0, g: 0, b: 1, a: 1 },
|
|
17
|
+
blueViolet: { r: 0.541176, g: 0.168627, b: 0.886275, a: 1 },
|
|
18
|
+
brown: { r: 0.647059, g: 0.164706, b: 0.164706, a: 1 },
|
|
19
|
+
burlywood: { r: 0.870588, g: 0.721569, b: 0.529412, a: 1 },
|
|
20
|
+
cadetBlue: { r: 0.372549, g: 0.619608, b: 0.627451, a: 1 },
|
|
21
|
+
chartreuse: { r: 0.498039, g: 1, b: 0, a: 1 },
|
|
22
|
+
chocolate: { r: 0.823529, g: 0.411765, b: 0.117647, a: 1 },
|
|
23
|
+
coral: { r: 1, g: 0.498039, b: 0.313726, a: 1 },
|
|
24
|
+
cornflowerBlue: { r: 0.392157, g: 0.584314, b: 0.929412, a: 1 },
|
|
25
|
+
cornsilk: { r: 1, g: 0.972549, b: 0.862745, a: 1 },
|
|
26
|
+
crimson: { r: 0.862745, g: 0.0784314, b: 0.235294, a: 1 },
|
|
27
|
+
cyan: { r: 0, g: 1, b: 1, a: 1 },
|
|
28
|
+
darkBlue: { r: 0, g: 0, b: 0.545098, a: 1 },
|
|
29
|
+
darkCyan: { r: 0, g: 0.545098, b: 0.545098, a: 1 },
|
|
30
|
+
darkGoldenrod: { r: 0.721569, g: 0.52549, b: 0.0431373, a: 1 },
|
|
31
|
+
darkGray: { r: 0.662745, g: 0.662745, b: 0.662745, a: 1 },
|
|
32
|
+
darkGreen: { r: 0, g: 0.392157, b: 0, a: 1 },
|
|
33
|
+
darkKhaki: { r: 0.741176, g: 0.717647, b: 0.419608, a: 1 },
|
|
34
|
+
darkMagenta: { r: 0.545098, g: 0, b: 0.545098, a: 1 },
|
|
35
|
+
darkOliveGreen: { r: 0.333333, g: 0.419608, b: 0.184314, a: 1 },
|
|
36
|
+
darkOrange: { r: 1, g: 0.54902, b: 0, a: 1 },
|
|
37
|
+
darkOrchid: { r: 0.6, g: 0.196078, b: 0.8, a: 1 },
|
|
38
|
+
darkRed: { r: 0.545098, g: 0, b: 0, a: 1 },
|
|
39
|
+
darkSalmon: { r: 0.913725, g: 0.588235, b: 0.478431, a: 1 },
|
|
40
|
+
darkSeaGreen: { r: 0.560784, g: 0.737255, b: 0.560784, a: 1 },
|
|
41
|
+
darkSlateBlue: { r: 0.282353, g: 0.239216, b: 0.545098, a: 1 },
|
|
42
|
+
darkSlateGray: { r: 0.184314, g: 0.309804, b: 0.309804, a: 1 },
|
|
43
|
+
darkTurquoise: { r: 0, g: 0.807843, b: 0.819608, a: 1 },
|
|
44
|
+
darkViolet: { r: 0.580392, g: 0, b: 0.827451, a: 1 },
|
|
45
|
+
deepPink: { r: 1, g: 0.0784314, b: 0.576471, a: 1 },
|
|
46
|
+
deepSkyBlue: { r: 0, g: 0.74902, b: 1, a: 1 },
|
|
47
|
+
dimGray: { r: 0.411765, g: 0.411765, b: 0.411765, a: 1 },
|
|
48
|
+
dodgerBlue: { r: 0.117647, g: 0.564706, b: 1, a: 1 },
|
|
49
|
+
firebrick: { r: 0.698039, g: 0.133333, b: 0.133333, a: 1 },
|
|
50
|
+
floralWhite: { r: 1, g: 0.980392, b: 0.941176, a: 1 },
|
|
51
|
+
forestGreen: { r: 0.133333, g: 0.545098, b: 0.133333, a: 1 },
|
|
52
|
+
fuchsia: { r: 1, g: 0, b: 1, a: 1 },
|
|
53
|
+
gainsboro: { r: 0.862745, g: 0.862745, b: 0.862745, a: 1 },
|
|
54
|
+
ghostWhite: { r: 0.972549, g: 0.972549, b: 1, a: 1 },
|
|
55
|
+
gold: { r: 1, g: 0.843137, b: 0, a: 1 },
|
|
56
|
+
goldenrod: { r: 0.854902, g: 0.647059, b: 0.12549, a: 1 },
|
|
57
|
+
gray: { r: 0.745098, g: 0.745098, b: 0.745098, a: 1 },
|
|
58
|
+
green: { r: 0, g: 1, b: 0, a: 1 },
|
|
59
|
+
greenYellow: { r: 0.678431, g: 1, b: 0.184314, a: 1 },
|
|
60
|
+
honeydew: { r: 0.941176, g: 1, b: 0.941176, a: 1 },
|
|
61
|
+
hotPink: { r: 1, g: 0.411765, b: 0.705882, a: 1 },
|
|
62
|
+
indigo: { r: 0.294118, g: 0, b: 0.509804, a: 1 },
|
|
63
|
+
ivory: { r: 1, g: 1, b: 0.941176, a: 1 },
|
|
64
|
+
khaki: { r: 0.941176, g: 0.901961, b: 0.54902, a: 1 },
|
|
65
|
+
lavender: { r: 0.901961, g: 0.901961, b: 0.980392, a: 1 },
|
|
66
|
+
lavenderBlush: { r: 1, g: 0.941176, b: 0.960784, a: 1 },
|
|
67
|
+
lawnGreen: { r: 0.486275, g: 0.988235, b: 0, a: 1 },
|
|
68
|
+
lemonChiffon: { r: 1, g: 0.980392, b: 0.803922, a: 1 },
|
|
69
|
+
lightBlue: { r: 0.678431, g: 0.847059, b: 0.901961, a: 1 },
|
|
70
|
+
lightCoral: { r: 0.941176, g: 0.501961, b: 0.501961, a: 1 },
|
|
71
|
+
lightCyan: { r: 0.878431, g: 1, b: 1, a: 1 },
|
|
72
|
+
lightGoldenrod: { r: 0.980392, g: 0.980392, b: 0.823529, a: 1 },
|
|
73
|
+
lightGray: { r: 0.827451, g: 0.827451, b: 0.827451, a: 1 },
|
|
74
|
+
lightGreen: { r: 0.564706, g: 0.933333, b: 0.564706, a: 1 },
|
|
75
|
+
lightPink: { r: 1, g: 0.713726, b: 0.756863, a: 1 },
|
|
76
|
+
lightSalmon: { r: 1, g: 0.627451, b: 0.478431, a: 1 },
|
|
77
|
+
lightSeaGreen: { r: 0.12549, g: 0.698039, b: 0.666667, a: 1 },
|
|
78
|
+
lightSkyBlue: { r: 0.529412, g: 0.807843, b: 0.980392, a: 1 },
|
|
79
|
+
lightSlateGray: { r: 0.466667, g: 0.533333, b: 0.6, a: 1 },
|
|
80
|
+
lightSteelBlue: { r: 0.690196, g: 0.768627, b: 0.870588, a: 1 },
|
|
81
|
+
lightYellow: { r: 1, g: 1, b: 0.878431, a: 1 },
|
|
82
|
+
lime: { r: 0, g: 1, b: 0, a: 1 },
|
|
83
|
+
limeGreen: { r: 0.196078, g: 0.803922, b: 0.196078, a: 1 },
|
|
84
|
+
linen: { r: 0.980392, g: 0.941176, b: 0.901961, a: 1 },
|
|
85
|
+
magenta: { r: 1, g: 0, b: 1, a: 1 },
|
|
86
|
+
maroon: { r: 0.690196, g: 0.188235, b: 0.376471, a: 1 },
|
|
87
|
+
mediumAquamarine: { r: 0.4, g: 0.803922, b: 0.666667, a: 1 },
|
|
88
|
+
mediumBlue: { r: 0, g: 0, b: 0.803922, a: 1 },
|
|
89
|
+
mediumOrchid: { r: 0.729412, g: 0.333333, b: 0.827451, a: 1 },
|
|
90
|
+
mediumPurple: { r: 0.576471, g: 0.439216, b: 0.858824, a: 1 },
|
|
91
|
+
mediumSeaGreen: { r: 0.235294, g: 0.701961, b: 0.443137, a: 1 },
|
|
92
|
+
mediumSlateBlue: { r: 0.482353, g: 0.407843, b: 0.933333, a: 1 },
|
|
93
|
+
mediumSpringGreen: { r: 0, g: 0.980392, b: 0.603922, a: 1 },
|
|
94
|
+
mediumTurquoise: { r: 0.282353, g: 0.819608, b: 0.8, a: 1 },
|
|
95
|
+
mediumVioletRed: { r: 0.780392, g: 0.0823529, b: 0.521569, a: 1 },
|
|
96
|
+
midnightBlue: { r: 0.0980392, g: 0.0980392, b: 0.439216, a: 1 },
|
|
97
|
+
mintCream: { r: 0.960784, g: 1, b: 0.980392, a: 1 },
|
|
98
|
+
mistyRose: { r: 1, g: 0.894118, b: 0.882353, a: 1 },
|
|
99
|
+
moccasin: { r: 1, g: 0.894118, b: 0.709804, a: 1 },
|
|
100
|
+
navyBlue: { r: 0, g: 0, b: 0.501961, a: 1 },
|
|
101
|
+
oldLace: { r: 0.992157, g: 0.960784, b: 0.901961, a: 1 },
|
|
102
|
+
olive: { r: 0.501961, g: 0.501961, b: 0, a: 1 },
|
|
103
|
+
oliveDrab: { r: 0.419608, g: 0.556863, b: 0.137255, a: 1 },
|
|
104
|
+
orange: { r: 1, g: 0.647059, b: 0, a: 1 },
|
|
105
|
+
orangeRed: { r: 1, g: 0.270588, b: 0, a: 1 },
|
|
106
|
+
orchid: { r: 0.854902, g: 0.439216, b: 0.839216, a: 1 },
|
|
107
|
+
paleGoldenrod: { r: 0.933333, g: 0.909804, b: 0.666667, a: 1 },
|
|
108
|
+
paleGreen: { r: 0.596078, g: 0.984314, b: 0.596078, a: 1 },
|
|
109
|
+
paleTurquoise: { r: 0.686275, g: 0.933333, b: 0.933333, a: 1 },
|
|
110
|
+
paleVioletRed: { r: 0.858824, g: 0.439216, b: 0.576471, a: 1 },
|
|
111
|
+
papayaWhip: { r: 1, g: 0.937255, b: 0.835294, a: 1 },
|
|
112
|
+
peachPuff: { r: 1, g: 0.854902, b: 0.72549, a: 1 },
|
|
113
|
+
peru: { r: 0.803922, g: 0.521569, b: 0.247059, a: 1 },
|
|
114
|
+
pink: { r: 1, g: 0.752941, b: 0.796078, a: 1 },
|
|
115
|
+
plum: { r: 0.866667, g: 0.627451, b: 0.866667, a: 1 },
|
|
116
|
+
powderBlue: { r: 0.690196, g: 0.878431, b: 0.901961, a: 1 },
|
|
117
|
+
purple: { r: 0.627451, g: 0.12549, b: 0.941176, a: 1 },
|
|
118
|
+
rebeccaPurple: { r: 0.4, g: 0.2, b: 0.6, a: 1 },
|
|
119
|
+
red: { r: 1, g: 0, b: 0, a: 1 },
|
|
120
|
+
rosyBrown: { r: 0.737255, g: 0.560784, b: 0.560784, a: 1 },
|
|
121
|
+
royalBlue: { r: 0.254902, g: 0.411765, b: 0.882353, a: 1 },
|
|
122
|
+
saddleBrown: { r: 0.545098, g: 0.270588, b: 0.0745098, a: 1 },
|
|
123
|
+
salmon: { r: 0.980392, g: 0.501961, b: 0.447059, a: 1 },
|
|
124
|
+
sandyBrown: { r: 0.956863, g: 0.643137, b: 0.376471, a: 1 },
|
|
125
|
+
seaGreen: { r: 0.180392, g: 0.545098, b: 0.341176, a: 1 },
|
|
126
|
+
seashell: { r: 1, g: 0.960784, b: 0.933333, a: 1 },
|
|
127
|
+
sienna: { r: 0.627451, g: 0.321569, b: 0.176471, a: 1 },
|
|
128
|
+
silver: { r: 0.752941, g: 0.752941, b: 0.752941, a: 1 },
|
|
129
|
+
skyBlue: { r: 0.529412, g: 0.807843, b: 0.921569, a: 1 },
|
|
130
|
+
slateBlue: { r: 0.415686, g: 0.352941, b: 0.803922, a: 1 },
|
|
131
|
+
slateGray: { r: 0.439216, g: 0.501961, b: 0.564706, a: 1 },
|
|
132
|
+
snow: { r: 1, g: 0.980392, b: 0.980392, a: 1 },
|
|
133
|
+
springGreen: { r: 0, g: 1, b: 0.498039, a: 1 },
|
|
134
|
+
steelBlue: { r: 0.27451, g: 0.509804, b: 0.705882, a: 1 },
|
|
135
|
+
tan: { r: 0.823529, g: 0.705882, b: 0.54902, a: 1 },
|
|
136
|
+
teal: { r: 0, g: 0.501961, b: 0.501961, a: 1 },
|
|
137
|
+
thistle: { r: 0.847059, g: 0.74902, b: 0.847059, a: 1 },
|
|
138
|
+
tomato: { r: 1, g: 0.388235, b: 0.278431, a: 1 },
|
|
139
|
+
transparent: { r: 1, g: 1, b: 1, a: 0 },
|
|
140
|
+
turquoise: { r: 0.25098, g: 0.878431, b: 0.815686, a: 1 },
|
|
141
|
+
violet: { r: 0.933333, g: 0.509804, b: 0.933333, a: 1 },
|
|
142
|
+
webGray: { r: 0.501961, g: 0.501961, b: 0.501961, a: 1 },
|
|
143
|
+
webGreen: { r: 0, g: 0.501961, b: 0, a: 1 },
|
|
144
|
+
webMaroon: { r: 0.501961, g: 0, b: 0, a: 1 },
|
|
145
|
+
webPurple: { r: 0.501961, g: 0, b: 0.501961, a: 1 },
|
|
146
|
+
wheat: { r: 0.960784, g: 0.870588, b: 0.701961, a: 1 },
|
|
147
|
+
white: { r: 1, g: 1, b: 1, a: 1 },
|
|
148
|
+
whiteSmoke: { r: 0.960784, g: 0.960784, b: 0.960784, a: 1 },
|
|
149
|
+
yellow: { r: 1, g: 1, b: 0, a: 1 },
|
|
150
|
+
yellowGreen: { r: 0.603922, g: 0.803922, b: 0.196078, a: 1 },
|
|
151
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Color = { r: number; g: number; b: number; a: number };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Point } from "./Point";
|
|
2
|
+
import type { Size } from "./Size";
|
|
3
|
+
import type { Vec2 } from "./Vec2";
|
|
4
|
+
|
|
5
|
+
export type Transform = {
|
|
6
|
+
position: Point;
|
|
7
|
+
scale: Vec2;
|
|
8
|
+
rotation: number;
|
|
9
|
+
/**
|
|
10
|
+
* width and height of the quad
|
|
11
|
+
*
|
|
12
|
+
* these are multiplied with scale for rendering
|
|
13
|
+
* but they are not used to calculate child transforms
|
|
14
|
+
*/
|
|
15
|
+
size: Size;
|
|
16
|
+
};
|
package/src/globals.d.ts
ADDED
package/src/limits.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const DEFAULT_LIMITS = {
|
|
2
|
+
/** Maximum number of rendered instances in the scene per frame */
|
|
3
|
+
instanceCount: 1024 * 2,
|
|
4
|
+
/** Maximum number of unique z-indexes in the scene */
|
|
5
|
+
zIndex: 32,
|
|
6
|
+
/** Maximum number of vfx shaders */
|
|
7
|
+
shaderCount: 32,
|
|
8
|
+
/** Maximum dimensions of a single texture */
|
|
9
|
+
textureSize: 1024 * 4,
|
|
10
|
+
/** Maximum number of layers in a texture array */
|
|
11
|
+
textureArrayLayers: 64,
|
|
12
|
+
/** Maximum size of uniforms buffer */
|
|
13
|
+
uniformBufferSize: 1024 * 64,
|
|
14
|
+
/** Maximum number of instance buffer fields - 16 minus the vertex locations used by the engine */
|
|
15
|
+
instanceBufferFields: 16 - 6,
|
|
16
|
+
/** Maximum size of instance buffer */
|
|
17
|
+
instanceBufferSize: Float32Array.BYTES_PER_ELEMENT * 4 * (16 - 6),
|
|
18
|
+
/** Maximum length of a single piece of text */
|
|
19
|
+
maxTextLength: 256,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export type Limits = typeof DEFAULT_LIMITS;
|
|
23
|
+
export type LimitsOptions = Partial<Limits>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert degrees to radians
|
|
3
|
+
* @param degrees Angle in degrees
|
|
4
|
+
* @returns Angle in radians
|
|
5
|
+
*/
|
|
6
|
+
export function deg2rad(degrees: number): number {
|
|
7
|
+
return degrees * (Math.PI / 180);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Convert radians to degrees
|
|
12
|
+
* @param radians Angle in radians
|
|
13
|
+
* @returns Angle in degrees
|
|
14
|
+
*/
|
|
15
|
+
export function rad2deg(radians: number): number {
|
|
16
|
+
return radians * (180 / Math.PI);
|
|
17
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { type Mat3, mat3, vec2 } from "wgpu-matrix";
|
|
2
|
+
import type { Point } from "../coreTypes/Point";
|
|
3
|
+
import type { Transform } from "../coreTypes/Transform";
|
|
4
|
+
import type { Camera } from "../scene/Camera";
|
|
5
|
+
import type { Resolution } from "../screen/resolution";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Creates a projection matrix for the given resolution.
|
|
9
|
+
* The matrix is a 3x3 matrix that converts screen coordinates centered at the origin ranging from:
|
|
10
|
+
*
|
|
11
|
+
* (-resolution.width / 2, resolution.height / 2) = top left corner to (resolution.width / 2, -resolution.height / 2) = bottom right corner
|
|
12
|
+
*
|
|
13
|
+
* into clip space centered at the originranging from:
|
|
14
|
+
*
|
|
15
|
+
* (-1, 1) = top left corner to (1, -1) = bottom right corner
|
|
16
|
+
*
|
|
17
|
+
* @param resolution - The resolution of the screen in logical pixels.
|
|
18
|
+
* @param dst - The destination matrix.
|
|
19
|
+
* @returns The projection matrix.
|
|
20
|
+
*/
|
|
21
|
+
export function createProjectionMatrix(resolution: Resolution, dst?: Mat3) {
|
|
22
|
+
const { width, height } = resolution;
|
|
23
|
+
|
|
24
|
+
// origin is always the same
|
|
25
|
+
// (0,0) => (0 * 2 / 1920, 0 * 2 / 1080) => (0,0)
|
|
26
|
+
//
|
|
27
|
+
// top left corner is (-1, 1) in clip space, (-width / 2, height / 2) in screen space e.g.
|
|
28
|
+
// (-960, 540) => (-960 * 2 / 1920, 540 * 2 / 1080) => (-1, 1)
|
|
29
|
+
return mat3.scaling([2 / width, 2 / height], dst);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function createViewMatrix(camera: Camera, target: Mat3) {
|
|
33
|
+
const matrix = mat3.identity(target);
|
|
34
|
+
|
|
35
|
+
// Apply scaling
|
|
36
|
+
mat3.scale(matrix, [camera.zoom, camera.zoom], matrix);
|
|
37
|
+
|
|
38
|
+
// Apply rotation
|
|
39
|
+
mat3.rotate(matrix, camera.rotationRadians, matrix);
|
|
40
|
+
|
|
41
|
+
// Apply translation
|
|
42
|
+
mat3.translate(matrix, [-camera.x, -camera.y], matrix);
|
|
43
|
+
|
|
44
|
+
return matrix;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function createModelMatrix(transform: Transform, base: Mat3) {
|
|
48
|
+
// Apply translation
|
|
49
|
+
mat3.translate(base, [transform.position.x, transform.position.y], base);
|
|
50
|
+
// Apply rotation
|
|
51
|
+
mat3.rotate(base, transform.rotation, base);
|
|
52
|
+
|
|
53
|
+
// Apply scaling
|
|
54
|
+
mat3.scale(base, [transform.scale.x, transform.scale.y], base);
|
|
55
|
+
|
|
56
|
+
return base;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function convertScreenToWorld(
|
|
60
|
+
screenCoordinates: Point,
|
|
61
|
+
camera: Camera,
|
|
62
|
+
projectionMatrix: Mat3,
|
|
63
|
+
resolution: Resolution,
|
|
64
|
+
): Point {
|
|
65
|
+
const inverseViewProjectionMatrix = mat3.mul(
|
|
66
|
+
mat3.inverse(camera.matrix),
|
|
67
|
+
mat3.inverse(projectionMatrix),
|
|
68
|
+
);
|
|
69
|
+
const normalizedDeviceCoordinates = {
|
|
70
|
+
x: (2 * screenCoordinates.x) / resolution.width - 1,
|
|
71
|
+
y: 1 - (2 * screenCoordinates.y) / resolution.height,
|
|
72
|
+
};
|
|
73
|
+
return transformPoint(
|
|
74
|
+
normalizedDeviceCoordinates,
|
|
75
|
+
inverseViewProjectionMatrix,
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function convertWorldToScreen(
|
|
80
|
+
worldCoordinates: Point,
|
|
81
|
+
camera: Camera,
|
|
82
|
+
projectionMatrix: Mat3,
|
|
83
|
+
resolution: Resolution,
|
|
84
|
+
): Point {
|
|
85
|
+
const viewProjectionMatrix = mat3.mul(projectionMatrix, camera.matrix);
|
|
86
|
+
const ndcPoint = transformPoint(worldCoordinates, viewProjectionMatrix);
|
|
87
|
+
return {
|
|
88
|
+
x: ((ndcPoint.x + 1) * resolution.width) / 2,
|
|
89
|
+
y: ((1 - ndcPoint.y) * resolution.height) / 2,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function transformPoint(point: Point, matrix: Mat3): Point {
|
|
94
|
+
const result = vec2.transformMat3([point.x, point.y], matrix);
|
|
95
|
+
return {
|
|
96
|
+
x: result[0],
|
|
97
|
+
y: result[1],
|
|
98
|
+
};
|
|
99
|
+
}
|
package/src/math/mod.ts
ADDED
package/src/mod.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AssetManager } from "./textures/AssetManager";
|
|
2
|
+
|
|
3
|
+
export type * from "./coreTypes/mod";
|
|
4
|
+
|
|
5
|
+
export type * from "./scene/QuadNode";
|
|
6
|
+
export type * from "./scene/SceneNode";
|
|
7
|
+
export type * from "./shaders/QuadShader";
|
|
8
|
+
export type * from "./text/TextNode";
|
|
9
|
+
|
|
10
|
+
export * from "./limits";
|
|
11
|
+
export * from "./Toodle";
|
|
12
|
+
|
|
13
|
+
export * as Colors from "./colors/mod";
|
|
14
|
+
export * as GfxMath from "./math/mod";
|
|
15
|
+
export * as Scene from "./scene/mod";
|
|
16
|
+
export * as Screen from "./screen/mod";
|
|
17
|
+
export * as Shaders from "./shaders/mod";
|
|
18
|
+
export * as Text from "./text/mod";
|
|
19
|
+
export * as Textures from "./textures/mod";
|
|
20
|
+
export * as Utils from "./utils/mod";
|
|
21
|
+
|
|
22
|
+
export { AssetManager } from "./textures/AssetManager";
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { IShader } from "../shaders/IShader";
|
|
2
|
+
import type { SceneNode } from "./SceneNode";
|
|
3
|
+
|
|
4
|
+
type Layer = {
|
|
5
|
+
z: number;
|
|
6
|
+
pipelines: Pipeline[];
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export type Pipeline<TNode extends SceneNode = SceneNode> = {
|
|
10
|
+
shader: IShader;
|
|
11
|
+
nodes: TNode[];
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export class Batcher {
|
|
15
|
+
nodes: SceneNode[] = [];
|
|
16
|
+
layers: Layer[] = [];
|
|
17
|
+
pipelines: Pipeline[] = [];
|
|
18
|
+
|
|
19
|
+
enqueue(node: SceneNode) {
|
|
20
|
+
if (node.renderComponent && node.isActive) {
|
|
21
|
+
this.nodes.push(node);
|
|
22
|
+
const z = node.layer;
|
|
23
|
+
const layer = this.#findOrCreateLayer(z);
|
|
24
|
+
const pipeline = this.#findOrCreatePipeline(
|
|
25
|
+
layer,
|
|
26
|
+
node.renderComponent.shader,
|
|
27
|
+
);
|
|
28
|
+
pipeline.nodes.push(node);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
for (const kid of node.kids) {
|
|
32
|
+
this.enqueue(kid);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
flush() {
|
|
37
|
+
this.nodes = [];
|
|
38
|
+
this.layers = [];
|
|
39
|
+
this.pipelines = [];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
#findOrCreateLayer(z: number) {
|
|
43
|
+
let layer = this.layers.find((l) => l.z === z);
|
|
44
|
+
if (!layer) {
|
|
45
|
+
layer = { z, pipelines: [] };
|
|
46
|
+
this.layers.push(layer);
|
|
47
|
+
this.layers.sort((a, b) => a.z - b.z);
|
|
48
|
+
}
|
|
49
|
+
return layer;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
#findOrCreatePipeline(layer: Layer, shader: IShader) {
|
|
53
|
+
let pipeline = layer.pipelines.find((p) => p.shader === shader);
|
|
54
|
+
if (!pipeline) {
|
|
55
|
+
pipeline = { shader, nodes: [] };
|
|
56
|
+
layer.pipelines.push(pipeline);
|
|
57
|
+
this.pipelines.push(pipeline);
|
|
58
|
+
}
|
|
59
|
+
return pipeline;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { mat3 } from "wgpu-matrix";
|
|
2
|
+
import type { Vec2 } from "../coreTypes/Vec2";
|
|
3
|
+
import { deg2rad, rad2deg } from "../math/angle";
|
|
4
|
+
import { createViewMatrix } from "../math/matrix";
|
|
5
|
+
|
|
6
|
+
export class Camera {
|
|
7
|
+
#position: Vec2 = { x: 0, y: 0 };
|
|
8
|
+
#zoom = 1;
|
|
9
|
+
#rotation = 0;
|
|
10
|
+
#isDirty = true;
|
|
11
|
+
#matrix = mat3.create();
|
|
12
|
+
|
|
13
|
+
get zoom() {
|
|
14
|
+
return this.#zoom;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
set zoom(value: number) {
|
|
18
|
+
this.#zoom = value;
|
|
19
|
+
this.setDirty();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
get rotation() {
|
|
23
|
+
return rad2deg(this.#rotation);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
set rotation(value: number) {
|
|
27
|
+
this.#rotation = deg2rad(value);
|
|
28
|
+
this.setDirty();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
get rotationRadians() {
|
|
32
|
+
return this.#rotation;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
set rotationRadians(value: number) {
|
|
36
|
+
this.#rotation = value;
|
|
37
|
+
this.setDirty();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
get x() {
|
|
41
|
+
return this.#position.x;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
get y() {
|
|
45
|
+
return this.#position.y;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
set x(value: number) {
|
|
49
|
+
this.#position.x = value;
|
|
50
|
+
this.setDirty();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
set y(value: number) {
|
|
54
|
+
this.#position.y = value;
|
|
55
|
+
this.setDirty();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
get matrix() {
|
|
59
|
+
if (this.#isDirty) {
|
|
60
|
+
this.#isDirty = false;
|
|
61
|
+
this.#matrix = createViewMatrix(this, this.#matrix);
|
|
62
|
+
}
|
|
63
|
+
return this.#matrix;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
setDirty() {
|
|
67
|
+
this.#isDirty = true;
|
|
68
|
+
}
|
|
69
|
+
}
|