@tolokoban/tgd 2.0.1 → 2.0.3
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/lib/dist/buffer/buffer.d.ts +0 -0
- package/lib/dist/buffer/buffer.d.ts.map +0 -0
- package/lib/dist/buffer/buffer.js +37 -0
- package/lib/dist/buffer/index.d.ts +0 -0
- package/lib/dist/buffer/index.d.ts.map +0 -0
- package/lib/dist/buffer/index.js +2 -0
- package/lib/dist/camera/camera-orthographic.d.ts +13 -5
- package/lib/dist/camera/camera-orthographic.d.ts.map +1 -1
- package/lib/dist/camera/camera-orthographic.js +97 -0
- package/lib/dist/camera/camera-perspective.d.ts +19 -9
- package/lib/dist/camera/camera-perspective.d.ts.map +1 -1
- package/lib/dist/camera/camera-perspective.js +94 -0
- package/lib/dist/camera/camera.d.ts +84 -18
- package/lib/dist/camera/camera.d.ts.map +1 -1
- package/lib/dist/camera/camera.js +368 -0
- package/lib/dist/camera/index.d.ts +3 -3
- package/lib/dist/camera/index.d.ts.map +1 -1
- package/lib/dist/camera/index.js +4 -0
- package/lib/dist/canvas/gizmo/gizmo.d.ts +42 -0
- package/lib/dist/canvas/gizmo/gizmo.d.ts.map +1 -0
- package/lib/dist/canvas/gizmo/gizmo.js +183 -0
- package/lib/dist/canvas/gizmo/index.d.ts +2 -0
- package/lib/dist/canvas/gizmo/index.d.ts.map +1 -0
- package/lib/dist/canvas/gizmo/index.js +2 -0
- package/lib/dist/canvas/gizmo/painter/shader.frag +17 -0
- package/lib/dist/canvas/gizmo/painter/shader.vert +24 -0
- package/lib/dist/canvas/gizmo/painter/tips.d.ts +13 -0
- package/lib/dist/canvas/gizmo/painter/tips.d.ts.map +1 -0
- package/lib/dist/canvas/gizmo/painter/tips.js +96 -0
- package/lib/dist/canvas/index.d.ts +3 -0
- package/lib/dist/canvas/index.d.ts.map +1 -0
- package/lib/dist/canvas/index.js +3 -0
- package/lib/dist/canvas/landscape/index.d.ts +2 -0
- package/lib/dist/canvas/landscape/index.d.ts.map +1 -0
- package/lib/dist/canvas/landscape/index.js +2 -0
- package/lib/dist/canvas/landscape/landscape.d.ts +18 -0
- package/lib/dist/canvas/landscape/landscape.d.ts.map +1 -0
- package/lib/dist/canvas/landscape/landscape.js +40 -0
- package/lib/dist/color/color.d.ts +22 -0
- package/lib/dist/color/color.d.ts.map +1 -0
- package/lib/dist/color/color.js +160 -0
- package/lib/dist/color/index.d.ts +2 -0
- package/lib/dist/color/index.d.ts.map +1 -0
- package/lib/dist/color/index.js +2 -0
- package/lib/dist/context/animation/animation-manager.d.ts +8 -0
- package/lib/dist/context/animation/animation-manager.d.ts.map +1 -0
- package/lib/dist/context/animation/animation-manager.js +41 -0
- package/lib/dist/context/context.d.ts +95 -8
- package/lib/dist/context/context.d.ts.map +1 -1
- package/lib/dist/context/context.js +297 -0
- package/lib/dist/context/index.d.ts +0 -0
- package/lib/dist/context/index.d.ts.map +0 -0
- package/lib/dist/context/index.js +2 -0
- package/lib/dist/controller/camera/index.d.ts +0 -0
- package/lib/dist/controller/camera/index.d.ts.map +0 -0
- package/lib/dist/controller/camera/index.js +2 -0
- package/lib/dist/controller/camera/orbit.d.ts +79 -4
- package/lib/dist/controller/camera/orbit.d.ts.map +1 -1
- package/lib/dist/controller/camera/orbit.js +186 -0
- package/lib/dist/controller/index.d.ts +0 -0
- package/lib/dist/controller/index.d.ts.map +0 -0
- package/lib/dist/controller/index.js +2 -0
- package/lib/dist/dataset/dataset.d.ts +78 -10
- package/lib/dist/dataset/dataset.d.ts.map +1 -1
- package/lib/dist/dataset/dataset.js +217 -0
- package/lib/dist/dataset/index.d.ts +0 -0
- package/lib/dist/dataset/index.d.ts.map +0 -0
- package/lib/dist/dataset/index.js +2 -0
- package/lib/dist/debug.d.ts +0 -0
- package/lib/dist/debug.d.ts.map +0 -0
- package/lib/dist/debug.js +13 -0
- package/lib/dist/event/event.d.ts +0 -0
- package/lib/dist/event/event.d.ts.map +0 -0
- package/lib/dist/event/event.js +13 -0
- package/lib/dist/event/index.d.ts +0 -0
- package/lib/dist/event/index.d.ts.map +0 -0
- package/lib/dist/event/index.js +2 -0
- package/lib/dist/filter/blur.d.ts +10 -0
- package/lib/dist/filter/blur.d.ts.map +1 -0
- package/lib/dist/filter/blur.js +42 -0
- package/lib/dist/filter/filter.d.ts +39 -0
- package/lib/dist/filter/filter.d.ts.map +1 -0
- package/lib/dist/filter/filter.js +43 -0
- package/lib/dist/filter/hue-rotation.d.ts +12 -0
- package/lib/dist/filter/hue-rotation.d.ts.map +1 -0
- package/lib/dist/filter/hue-rotation.js +41 -0
- package/lib/dist/filter/index.d.ts +4 -0
- package/lib/dist/filter/index.d.ts.map +1 -0
- package/lib/dist/filter/index.js +4 -0
- package/lib/dist/geometry/box.d.ts +10 -0
- package/lib/dist/geometry/box.d.ts.map +1 -0
- package/lib/dist/geometry/box.js +136 -0
- package/lib/dist/geometry/geometry.d.ts +47 -0
- package/lib/dist/geometry/geometry.d.ts.map +1 -0
- package/lib/dist/geometry/geometry.js +190 -0
- package/lib/dist/geometry/index.d.ts +3 -0
- package/lib/dist/geometry/index.d.ts.map +1 -0
- package/lib/dist/geometry/index.js +3 -0
- package/lib/dist/index.d.ts +7 -0
- package/lib/dist/index.d.ts.map +1 -1
- package/lib/dist/index.js +21 -2
- package/lib/dist/input/index.d.ts +0 -0
- package/lib/dist/input/index.d.ts.map +0 -0
- package/lib/dist/input/index.js +4 -0
- package/lib/dist/input/inputs.d.ts +0 -0
- package/lib/dist/input/inputs.d.ts.map +1 -1
- package/lib/dist/input/inputs.js +23 -0
- package/lib/dist/input/keyboard.d.ts +3 -0
- package/lib/dist/input/keyboard.d.ts.map +1 -1
- package/lib/dist/input/keyboard.js +46 -0
- package/lib/dist/input/pointer.d.ts +17 -33
- package/lib/dist/input/pointer.d.ts.map +1 -1
- package/lib/dist/input/pointer.js +138 -0
- package/lib/dist/light/index.d.ts +2 -0
- package/lib/dist/light/index.d.ts.map +1 -0
- package/lib/dist/light/index.js +2 -0
- package/lib/dist/light/light.d.ts +16 -0
- package/lib/dist/light/light.d.ts.map +1 -0
- package/lib/dist/light/light.js +19 -0
- package/lib/dist/loader/image.d.ts +4 -0
- package/lib/dist/loader/image.d.ts.map +1 -1
- package/lib/dist/loader/image.js +31 -0
- package/lib/dist/loader/index.d.ts +0 -0
- package/lib/dist/loader/index.d.ts.map +0 -0
- package/lib/dist/loader/index.js +2 -0
- package/lib/dist/material/diffuse.d.ts +28 -0
- package/lib/dist/material/diffuse.d.ts.map +1 -0
- package/lib/dist/material/diffuse.js +68 -0
- package/lib/dist/material/ghost.d.ts +19 -0
- package/lib/dist/material/ghost.d.ts.map +1 -0
- package/lib/dist/material/ghost.js +25 -0
- package/lib/dist/material/index.d.ts +5 -0
- package/lib/dist/material/index.d.ts.map +1 -0
- package/lib/dist/material/index.js +5 -0
- package/lib/dist/material/material.d.ts +29 -0
- package/lib/dist/material/material.d.ts.map +1 -0
- package/lib/dist/material/material.js +14 -0
- package/lib/dist/material/normals.d.ts +13 -0
- package/lib/dist/material/normals.d.ts.map +1 -0
- package/lib/dist/material/normals.js +20 -0
- package/lib/dist/math/index.d.ts +3 -0
- package/lib/dist/math/index.d.ts.map +1 -1
- package/lib/dist/math/index.js +8 -0
- package/lib/dist/math/mat3.d.ts +8 -0
- package/lib/dist/math/mat3.d.ts.map +1 -1
- package/lib/dist/math/mat3.js +154 -0
- package/lib/dist/math/mat4.d.ts +111 -2
- package/lib/dist/math/mat4.d.ts.map +1 -1
- package/lib/dist/math/mat4.js +402 -0
- package/lib/dist/math/mat4.test.d.ts +0 -0
- package/lib/dist/math/mat4.test.d.ts.map +0 -0
- package/lib/dist/math/mat4.test.js +57 -0
- package/lib/dist/math/quat.d.ts +1 -0
- package/lib/dist/math/quat.d.ts.map +1 -1
- package/lib/dist/math/quat.js +184 -0
- package/lib/dist/math/quat.test.d.ts +0 -0
- package/lib/dist/math/quat.test.d.ts.map +0 -0
- package/lib/dist/math/quat.test.js +45 -0
- package/lib/dist/math/transfo.d.ts +27 -0
- package/lib/dist/math/transfo.d.ts.map +1 -0
- package/lib/dist/math/transfo.js +86 -0
- package/lib/dist/math/vec2.d.ts +34 -0
- package/lib/dist/math/vec2.d.ts.map +1 -0
- package/lib/dist/math/vec2.js +119 -0
- package/lib/dist/math/vec3.d.ts +24 -13
- package/lib/dist/math/vec3.d.ts.map +1 -1
- package/lib/dist/math/vec3.js +187 -0
- package/lib/dist/math/vec3.test.d.ts +2 -0
- package/lib/dist/math/vec3.test.d.ts.map +1 -0
- package/lib/dist/math/vec3.test.js +22 -0
- package/lib/dist/math/vec4.d.ts +8 -4
- package/lib/dist/math/vec4.d.ts.map +1 -1
- package/lib/dist/math/vec4.js +152 -0
- package/lib/dist/math/vec4.test.d.ts +0 -0
- package/lib/dist/math/vec4.test.d.ts.map +0 -0
- package/lib/dist/math/vec4.test.js +15 -0
- package/lib/dist/painter/axis/axis.d.ts +1 -1
- package/lib/dist/painter/axis/axis.d.ts.map +1 -1
- package/lib/dist/painter/axis/axis.frag +11 -0
- package/lib/dist/painter/axis/axis.js +84 -0
- package/lib/dist/painter/axis/axis.vert +21 -0
- package/lib/dist/painter/axis/index.d.ts +0 -0
- package/lib/dist/painter/axis/index.d.ts.map +0 -0
- package/lib/dist/painter/axis/index.js +2 -0
- package/lib/dist/painter/background/background.d.ts +5 -1
- package/lib/dist/painter/background/background.d.ts.map +1 -1
- package/lib/dist/painter/background/background.frag +11 -0
- package/lib/dist/painter/background/background.js +63 -0
- package/lib/dist/painter/background/background.vert +16 -0
- package/lib/dist/painter/background/index.d.ts +0 -0
- package/lib/dist/painter/background/index.d.ts.map +0 -0
- package/lib/dist/painter/background/index.js +2 -0
- package/lib/dist/painter/clear.d.ts +11 -6
- package/lib/dist/painter/clear.d.ts.map +1 -1
- package/lib/dist/painter/clear.js +51 -0
- package/lib/dist/painter/depth.d.ts +0 -0
- package/lib/dist/painter/depth.d.ts.map +1 -1
- package/lib/dist/painter/depth.js +34 -0
- package/lib/dist/painter/filter/filter.d.ts +23 -0
- package/lib/dist/painter/filter/filter.d.ts.map +1 -0
- package/lib/dist/painter/filter/filter.frag +15 -0
- package/lib/dist/painter/filter/filter.js +76 -0
- package/lib/dist/painter/filter/filter.vert +11 -0
- package/lib/dist/painter/filter/index.d.ts +2 -0
- package/lib/dist/painter/filter/index.d.ts.map +1 -0
- package/lib/dist/painter/filter/index.js +2 -0
- package/lib/dist/painter/framebuffer.d.ts +38 -0
- package/lib/dist/painter/framebuffer.d.ts.map +1 -0
- package/lib/dist/painter/framebuffer.js +102 -0
- package/lib/dist/painter/group.d.ts +4 -0
- package/lib/dist/painter/group.d.ts.map +1 -1
- package/lib/dist/painter/group.js +59 -0
- package/lib/dist/painter/index.d.ts +3 -1
- package/lib/dist/painter/index.d.ts.map +1 -1
- package/lib/dist/painter/index.js +12 -0
- package/lib/dist/painter/logic.d.ts +3 -0
- package/lib/dist/painter/logic.d.ts.map +1 -1
- package/lib/dist/painter/logic.js +16 -0
- package/lib/dist/painter/mesh/gltf/gltf.d.ts +14 -0
- package/lib/dist/painter/mesh/gltf/gltf.d.ts.map +1 -0
- package/lib/dist/painter/mesh/gltf/gltf.js +93 -0
- package/lib/dist/painter/mesh/gltf/index.d.ts +2 -0
- package/lib/dist/painter/mesh/gltf/index.d.ts.map +1 -0
- package/lib/dist/painter/mesh/gltf/index.js +2 -0
- package/lib/dist/painter/mesh/index.d.ts +4 -0
- package/lib/dist/painter/mesh/index.d.ts.map +1 -0
- package/lib/dist/painter/mesh/index.js +4 -0
- package/lib/dist/painter/mesh/mesh/index.d.ts +2 -0
- package/lib/dist/painter/mesh/mesh/index.d.ts.map +1 -0
- package/lib/dist/painter/mesh/mesh/index.js +2 -0
- package/lib/dist/painter/mesh/mesh/mesh.d.ts +32 -0
- package/lib/dist/painter/mesh/mesh/mesh.d.ts.map +1 -0
- package/lib/dist/painter/mesh/mesh/mesh.js +128 -0
- package/lib/dist/painter/mesh/normals/index.d.ts +2 -0
- package/lib/dist/painter/mesh/normals/index.d.ts.map +1 -0
- package/lib/dist/painter/mesh/normals/index.js +2 -0
- package/lib/dist/painter/mesh/normals/normals.d.ts +18 -0
- package/lib/dist/painter/mesh/normals/normals.d.ts.map +1 -0
- package/lib/dist/painter/mesh/normals/normals.js +53 -0
- package/lib/dist/painter/mesh/normals/shader.frag +14 -0
- package/lib/dist/painter/mesh/normals/shader.vert +18 -0
- package/lib/dist/painter/node.d.ts +26 -0
- package/lib/dist/painter/node.d.ts.map +1 -0
- package/lib/dist/painter/node.js +67 -0
- package/lib/dist/painter/painter.d.ts +1 -0
- package/lib/dist/painter/painter.d.ts.map +1 -1
- package/lib/dist/painter/painter.js +4 -0
- package/lib/dist/painter/segments/index.d.ts +0 -0
- package/lib/dist/painter/segments/index.d.ts.map +0 -0
- package/lib/dist/painter/segments/index.js +2 -0
- package/lib/dist/painter/segments/segments.d.ts +56 -17
- package/lib/dist/painter/segments/segments.d.ts.map +1 -1
- package/lib/dist/painter/segments/segments.frag +12 -0
- package/lib/dist/painter/segments/segments.js +196 -0
- package/lib/dist/painter/segments/segments.vert +114 -0
- package/lib/dist/painter/skybox/index.d.ts +0 -0
- package/lib/dist/painter/skybox/index.d.ts.map +0 -0
- package/lib/dist/painter/skybox/index.js +2 -0
- package/lib/dist/painter/skybox/skybox.d.ts +2 -2
- package/lib/dist/painter/skybox/skybox.d.ts.map +1 -1
- package/lib/dist/painter/skybox/skybox.frag +15 -0
- package/lib/dist/painter/skybox/skybox.js +59 -0
- package/lib/dist/painter/skybox/skybox.vert +10 -0
- package/lib/dist/parser/for-each-line.d.ts +3 -0
- package/lib/dist/parser/for-each-line.d.ts.map +1 -1
- package/lib/dist/parser/for-each-line.js +17 -0
- package/lib/dist/parser/gltf/gltf.d.ts +34 -0
- package/lib/dist/parser/gltf/gltf.d.ts.map +1 -0
- package/lib/dist/parser/gltf/gltf.js +164 -0
- package/lib/dist/parser/gltf/index.d.ts +2 -0
- package/lib/dist/parser/gltf/index.d.ts.map +1 -0
- package/lib/dist/parser/gltf/index.js +2 -0
- package/lib/dist/parser/gltf/parser.d.ts +9 -0
- package/lib/dist/parser/gltf/parser.d.ts.map +1 -0
- package/lib/dist/parser/gltf/parser.js +53 -0
- package/lib/dist/parser/index.d.ts +1 -0
- package/lib/dist/parser/index.d.ts.map +1 -1
- package/lib/dist/parser/index.js +3 -0
- package/lib/dist/parser/mesh/wavefront.d.ts +70 -12
- package/lib/dist/parser/mesh/wavefront.d.ts.map +1 -1
- package/lib/dist/parser/mesh/wavefront.js +246 -0
- package/lib/dist/program/index.d.ts +0 -0
- package/lib/dist/program/index.d.ts.map +0 -0
- package/lib/dist/program/index.js +2 -0
- package/lib/dist/program/program.d.ts +15 -0
- package/lib/dist/program/program.d.ts.map +1 -1
- package/lib/dist/program/program.js +220 -0
- package/lib/dist/ref-map.d.ts +15 -0
- package/lib/dist/ref-map.d.ts.map +1 -1
- package/lib/dist/ref-map.js +48 -0
- package/lib/dist/resource/index.d.ts +0 -0
- package/lib/dist/resource/index.d.ts.map +0 -0
- package/lib/dist/resource/index.js +5 -0
- package/lib/dist/resource/program.d.ts +0 -0
- package/lib/dist/resource/program.d.ts.map +1 -1
- package/lib/dist/resource/program.js +20 -0
- package/lib/dist/resource/resource.d.ts +7 -1
- package/lib/dist/resource/resource.d.ts.map +1 -1
- package/lib/dist/resource/resource.js +48 -0
- package/lib/dist/resource/texture2d.d.ts +1 -0
- package/lib/dist/resource/texture2d.d.ts.map +1 -1
- package/lib/dist/resource/texture2d.js +20 -0
- package/lib/dist/resource/textureCube.d.ts +0 -0
- package/lib/dist/resource/textureCube.d.ts.map +1 -1
- package/lib/dist/resource/textureCube.js +17 -0
- package/lib/dist/shader/code.d.ts +12 -0
- package/lib/dist/shader/code.d.ts.map +1 -0
- package/lib/dist/shader/code.js +32 -0
- package/lib/dist/shader/fragment.d.ts +23 -0
- package/lib/dist/shader/fragment.d.ts.map +1 -0
- package/lib/dist/shader/fragment.js +37 -0
- package/lib/dist/shader/vertex.d.ts +23 -0
- package/lib/dist/shader/vertex.d.ts.map +1 -0
- package/lib/dist/shader/vertex.js +35 -0
- package/lib/dist/texture/index.d.ts +0 -0
- package/lib/dist/texture/index.d.ts.map +0 -0
- package/lib/dist/texture/index.js +3 -0
- package/lib/dist/texture/texture2d.d.ts +4 -3
- package/lib/dist/texture/texture2d.d.ts.map +1 -1
- package/lib/dist/texture/texture2d.js +132 -0
- package/lib/dist/texture/textureCube.d.ts +0 -0
- package/lib/dist/texture/textureCube.d.ts.map +1 -1
- package/lib/dist/texture/textureCube.js +87 -0
- package/lib/dist/types/animation.d.ts +20 -0
- package/lib/dist/types/animation.d.ts.map +1 -0
- package/lib/dist/types/animation.js +2 -0
- package/lib/dist/types/arrays.d.ts +33 -0
- package/lib/dist/types/arrays.d.ts.map +1 -0
- package/lib/dist/types/arrays.js +2 -0
- package/lib/dist/types/context.d.ts +7 -2
- package/lib/dist/types/context.d.ts.map +1 -1
- package/lib/dist/types/context.js +2 -0
- package/lib/dist/types/gltf.d.ts +200 -0
- package/lib/dist/types/gltf.d.ts.map +1 -0
- package/lib/dist/types/gltf.js +117 -0
- package/lib/dist/types/guards.d.ts +25 -0
- package/lib/dist/types/guards.d.ts.map +1 -0
- package/lib/dist/types/guards.js +218 -0
- package/lib/dist/types/index.d.ts +2 -0
- package/lib/dist/types/index.d.ts.map +1 -1
- package/lib/dist/types/index.js +10 -0
- package/lib/dist/types/input-keyboard.d.ts +3 -0
- package/lib/dist/types/input-keyboard.d.ts.map +1 -1
- package/lib/dist/types/input-keyboard.js +2 -0
- package/lib/dist/types/input-pointer.d.ts +33 -20
- package/lib/dist/types/input-pointer.d.ts.map +1 -1
- package/lib/dist/types/input-pointer.js +2 -0
- package/lib/dist/types/mesh.d.ts +10 -0
- package/lib/dist/types/mesh.d.ts.map +1 -0
- package/lib/dist/types/mesh.js +2 -0
- package/lib/dist/types/painter.d.ts +0 -0
- package/lib/dist/types/painter.d.ts.map +0 -0
- package/lib/dist/types/painter.js +2 -0
- package/lib/dist/types/program.d.ts +15 -0
- package/lib/dist/types/program.d.ts.map +1 -1
- package/lib/dist/types/program.js +2 -0
- package/lib/dist/types/texture2d.d.ts +14 -6
- package/lib/dist/types/texture2d.d.ts.map +1 -1
- package/lib/dist/types/texture2d.js +2 -0
- package/lib/dist/types/textureCube.d.ts +39 -0
- package/lib/dist/types/textureCube.d.ts.map +1 -1
- package/lib/dist/types/textureCube.js +2 -0
- package/lib/dist/types/webgl.d.ts +28 -1
- package/lib/dist/types/webgl.d.ts.map +1 -1
- package/lib/dist/types/webgl.js +2 -0
- package/lib/dist/utils/action/camera.d.ts +13 -0
- package/lib/dist/utils/action/camera.d.ts.map +1 -0
- package/lib/dist/utils/action/camera.js +30 -0
- package/lib/dist/utils/action/index.d.ts +2 -0
- package/lib/dist/utils/action/index.d.ts.map +1 -0
- package/lib/dist/utils/action/index.js +2 -0
- package/lib/dist/utils/canvas.d.ts +9 -1
- package/lib/dist/utils/canvas.d.ts.map +1 -1
- package/lib/dist/utils/canvas.js +23 -0
- package/lib/dist/utils/ease-func/ease-func.d.ts +32 -0
- package/lib/dist/utils/ease-func/ease-func.d.ts.map +1 -0
- package/lib/dist/utils/ease-func/ease-func.js +142 -0
- package/lib/dist/utils/ease-func/index.d.ts +2 -0
- package/lib/dist/utils/ease-func/index.d.ts.map +1 -0
- package/lib/dist/utils/ease-func/index.js +2 -0
- package/lib/dist/utils/fetch/fetch.d.ts +2 -0
- package/lib/dist/utils/fetch/fetch.d.ts.map +1 -0
- package/lib/dist/utils/fetch/fetch.js +5 -0
- package/lib/dist/utils/fetch/index.d.ts +2 -0
- package/lib/dist/utils/fetch/index.d.ts.map +1 -0
- package/lib/dist/utils/fetch/index.js +2 -0
- package/lib/dist/utils/fullscreen.d.ts +21 -0
- package/lib/dist/utils/fullscreen.d.ts.map +1 -0
- package/lib/dist/utils/fullscreen.js +64 -0
- package/lib/dist/utils/index.d.ts +4 -0
- package/lib/dist/utils/index.d.ts.map +1 -1
- package/lib/dist/utils/index.js +6 -0
- package/lib/dist/utils/math.d.ts +3 -0
- package/lib/dist/utils/math.d.ts.map +1 -0
- package/lib/dist/utils/math.js +11 -0
- package/lib/dist/utils/ref-map.d.ts +22 -0
- package/lib/dist/utils/ref-map.d.ts.map +1 -0
- package/lib/dist/utils/ref-map.js +48 -0
- package/lib/dist/vao/index.d.ts +0 -0
- package/lib/dist/vao/index.d.ts.map +0 -0
- package/lib/dist/vao/index.js +2 -0
- package/lib/dist/vao/vao.d.ts +5 -1
- package/lib/dist/vao/vao.d.ts.map +1 -1
- package/lib/dist/vao/vao.js +67 -0
- package/package.json +2 -4
- package/lib/dist/index.js.map +0 -1
- package/lib/dist/mesh/mesh.d.ts +0 -11
- package/lib/dist/mesh/mesh.d.ts.map +0 -1
- package/lib/dist/painter/isometric/isometric.frag.d.ts +0 -3
- package/lib/dist/painter/isometric/isometric.frag.d.ts.map +0 -1
- package/lib/dist/painter/isometric/isometric.vert.d.ts +0 -3
- package/lib/dist/painter/isometric/isometric.vert.d.ts.map +0 -1
- package/lib/dist/painter/primitive/primitive.frag.d.ts +0 -3
- package/lib/dist/painter/primitive/primitive.frag.d.ts.map +0 -1
- package/lib/dist/painter/primitive/primitive.vert.d.ts +0 -3
- package/lib/dist/painter/primitive/primitive.vert.d.ts.map +0 -1
- package/lib/dist/painter/sprites/sprites-painter.frag.d.ts +0 -3
- package/lib/dist/painter/sprites/sprites-painter.frag.d.ts.map +0 -1
- package/lib/dist/painter/sprites/sprites-painter.vert.d.ts +0 -3
- package/lib/dist/painter/sprites/sprites-painter.vert.d.ts.map +0 -1
package/lib/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","mappings":"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","sources":["webpack://@tolokoban/tgd/webpack/bootstrap","webpack://@tolokoban/tgd/webpack/runtime/define property getters","webpack://@tolokoban/tgd/webpack/runtime/hasOwnProperty shorthand","webpack://@tolokoban/tgd/./src/debug.ts","webpack://@tolokoban/tgd/./src/math/vec3.ts","webpack://@tolokoban/tgd/./src/math/mat4.ts","webpack://@tolokoban/tgd/./src/math/vec4.ts","webpack://@tolokoban/tgd/./src/math/quat.ts","webpack://@tolokoban/tgd/./src/math/mat3.ts","webpack://@tolokoban/tgd/./src/camera/camera.ts","webpack://@tolokoban/tgd/./src/camera/camera-orthographic.ts","webpack://@tolokoban/tgd/./src/camera/camera-perspective.ts","webpack://@tolokoban/tgd/./src/painter/painter.ts","webpack://@tolokoban/tgd/./src/painter/group.ts","webpack://@tolokoban/tgd/./src/resource/resource.ts","webpack://@tolokoban/tgd/./src/program/program.ts","webpack://@tolokoban/tgd/./src/resource/program.ts","webpack://@tolokoban/tgd/./src/loader/image.ts","webpack://@tolokoban/tgd/./src/event/event.ts","webpack://@tolokoban/tgd/./src/utils/canvas.ts","webpack://@tolokoban/tgd/./src/texture/texture2d.ts","webpack://@tolokoban/tgd/./src/texture/textureCube.ts","webpack://@tolokoban/tgd/./src/resource/texture2d.ts","webpack://@tolokoban/tgd/./src/resource/textureCube.ts","webpack://@tolokoban/tgd/./src/buffer/buffer.ts","webpack://@tolokoban/tgd/./src/vao/vao.ts","webpack://@tolokoban/tgd/./src/input/keyboard.ts","webpack://@tolokoban/tgd/./src/input/pointer.ts","webpack://@tolokoban/tgd/./src/input/inputs.ts","webpack://@tolokoban/tgd/./src/context/context.ts","webpack://@tolokoban/tgd/./src/controller/camera/orbit.ts","webpack://@tolokoban/tgd/./src/dataset/dataset.ts","webpack://@tolokoban/tgd/./src/painter/axis/axis.ts","webpack://@tolokoban/tgd/./src/painter/background/background.ts","webpack://@tolokoban/tgd/./src/painter/clear.ts","webpack://@tolokoban/tgd/./src/painter/depth.ts","webpack://@tolokoban/tgd/./src/painter/logic.ts","webpack://@tolokoban/tgd/./src/painter/segments/segments.ts","webpack://@tolokoban/tgd/./src/painter/skybox/skybox.ts","webpack://@tolokoban/tgd/./src/parser/mesh/wavefront.ts","webpack://@tolokoban/tgd/./src/parser/for-each-line.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export function padColOfNumbers(values: number[], decimals = 6): string[] {\n const p = Math.pow(10, decimals)\n const out: string[] = []\n let max = 0\n for (const val of values) {\n const n = Math.round(val * p) / p\n const txt = n.toFixed(decimals)\n max = Math.max(max, txt.length)\n out.push(txt)\n }\n return out.map(txt => txt.padStart(max, \" \"))\n}\n","import { TgdMat3 } from \"./mat3\"\nimport { TgdMat4 } from \"./mat4\"\nimport { TgdVec4 } from \"./vec4\"\n\ntype Arr3 = TgdVec3 | [x: number, y: number, z: number]\nexport class TgdVec3 extends Float32Array {\n constructor()\n constructor(x: Arr3)\n constructor(x: number)\n constructor(x: number, y: number)\n constructor(x: number, y: number, z: number)\n constructor(x: number | Arr3 = 0, y: number = 0, z: number = 0) {\n super(3)\n if (typeof x !== \"number\") {\n this.x = x[0]\n this.y = x[1]\n this.z = x[2]\n return\n }\n this.x = x\n this.y = y\n this.z = z\n }\n\n clone() {\n return new TgdVec3(this)\n }\n\n isEqual([x, y, z]: Arr3) {\n if (x !== this.x) return false\n if (y !== this.y) return false\n if (z !== this.z) return false\n return true\n }\n\n isClose([x, y, z]: Arr3, epsilon = 1e-6) {\n if (Math.abs(x - this.x) > epsilon) return false\n if (Math.abs(y - this.y) > epsilon) return false\n if (Math.abs(z - this.z) > epsilon) return false\n return true\n }\n\n rotateAround(axis: Arr3, angleInRadians: number) {\n // result := V.cos(a) + (KxV).sin(a) + K(K.V)(1 - cos(a))\n const C = Math.cos(angleInRadians)\n const S = Math.sin(angleInRadians)\n const [Vx, Vy, Vz] = this\n const [Kx, Ky, Kz] = axis\n const dot = Vx * Kx + Vy * Ky + Vz * Kz\n const crossX = Ky * Vz - Kz * Vy\n const crossY = Kz * Vx - Kx * Vz\n const crossZ = Kx * Vy - Ky * Vx\n const a = dot * (1 - C)\n this.x = Vx * C + crossX * S + Kx * a\n this.y = Vy * C + crossY * S + Ky * a\n this.z = Vz * C + crossZ * S + Kz * a\n return this\n }\n\n /**\n * V := M×V\n */\n applyMatrix(mat: TgdMat3 | TgdMat4): this {\n const { x, y, z } = this\n this.x = x * mat.m00 + y * mat.m10 + z * mat.m20\n this.y = x * mat.m01 + y * mat.m11 + z * mat.m21\n this.z = x * mat.m02 + y * mat.m12 + z * mat.m22\n return this\n }\n\n from([x, y, z]: Arr3): this {\n this.x = x\n this.y = y\n this.z = z\n return this\n }\n\n get x() {\n return this[0]\n }\n set x(value: number) {\n this[0] = value\n }\n\n get y() {\n return this[1]\n }\n set y(value: number) {\n this[1] = value\n }\n\n get z() {\n return this[2]\n }\n set z(value: number) {\n this[2] = value\n }\n\n add(...vectors: Arr3[]): this {\n for (const vec of vectors) {\n this[0] += vec[0]\n this[1] += vec[1]\n this[2] += vec[2]\n }\n return this\n }\n\n addWithScale([x, y, z]: Arr3, scale = 1): this {\n this[0] += x * scale\n this[1] += y * scale\n this[2] += z * scale\n return this\n }\n\n subtract(vec: Arr3): this {\n this[0] -= vec[0]\n this[1] -= vec[1]\n this[2] -= vec[2]\n return this\n }\n\n scale(factor: number): this {\n this[0] *= factor\n this[1] *= factor\n this[2] *= factor\n return this\n }\n\n dot(vec: Arr3): number {\n return this[0] * vec[0] + this[1] * vec[1] + this[2] * vec[2]\n }\n\n get size() {\n return Math.sqrt(\n this[0] * this[0] + this[1] * this[1] + this[2] * this[2]\n )\n }\n\n normalize(): this {\n const squareLength =\n this[0] * this[0] + this[1] * this[1] + this[2] * this[2]\n if (squareLength === 0) return this\n\n return this.scale(1 / Math.sqrt(squareLength))\n }\n\n cross([x2, y2, z2]: Arr3) {\n const [x1, y1, z1] = this\n this[0] = y1 * z2 - y2 * z1\n this[1] = z1 * x2 - z2 * x1\n this[2] = x1 * y2 - x2 * y1\n }\n\n /**\n * Set random values between -0.5 and +0.5 to each coordinate.\n */\n random(): this {\n this[0] = Math.random() - 0.5\n this[1] = Math.random() - 0.5\n this[2] = Math.random() - 0.5\n return this\n }\n\n debug(caption = \"vec3\") {\n const { x, y, z } = this\n const out: string[] = [x, y, z].map(n => n.toFixed(6))\n console.log(\n `${caption}: `,\n out.join(\" | \"),\n \" length:\",\n Math.sqrt(x * x + y * y + z * z)\n )\n }\n}\n","import { padColOfNumbers } from \"@/debug\"\nimport { TgdPainterClearOptions } from \"./../painter/clear\"\nimport { TgdMat3 } from \"./mat3\"\nimport { TgdQuat } from \"./quat\"\nimport { TgdVec3 } from \"./vec3\"\nimport { TgdVec4 } from \"./vec4\"\n/**\n * Column-first 4x4 matrix.\n *\n * `m23` means column 2 and row 3.\n *\n * This is not the same as what mathematicians are used to,\n * but its how WebGL will store matrices in memory.\n */\nexport class TgdMat4 extends Float32Array {\n constructor()\n constructor(mat: TgdMat4)\n constructor(\n m00: number,\n m01: number,\n m02: number,\n m03: number,\n m10: number,\n m11: number,\n m12: number,\n m13: number,\n m20: number,\n m21: number,\n m22: number,\n m23: number,\n m30: number,\n m31: number,\n m32: number,\n m33: number\n )\n constructor(\n m00: number | TgdMat4 = 1,\n m01: number = 0,\n m02: number = 0,\n m03: number = 0,\n m10: number = 0,\n m11: number = 1,\n m12: number = 0,\n m13: number = 0,\n m20: number = 0,\n m21: number = 0,\n m22: number = 1,\n m23: number = 0,\n m30: number = 0,\n m31: number = 0,\n m32: number = 0,\n m33: number = 1\n ) {\n if (typeof m00 === \"number\") {\n super([\n m00,\n m01,\n m02,\n m03,\n m10,\n m11,\n m12,\n m13,\n m20,\n m21,\n m22,\n m23,\n m30,\n m31,\n m32,\n m33,\n ])\n } else {\n super(m00)\n }\n }\n\n multiply(mat4: TgdMat4): this {\n // prettier-ignore\n const [\n a00, a01, a02, a03,\n a10, a11, a12, a13,\n a20, a21, a22, a23,\n a30, a31, a32, a33,\n ] = this\n // prettier-ignore\n const [\n b00, b01, b02, b03,\n b10, b11, b12, b13,\n b20, b21, b22, b23,\n b30, b31, b32, b33,\n ] = mat4\n this.m00 = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03\n this.m10 = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13\n this.m20 = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23\n this.m30 = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33\n this.m01 = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03\n this.m11 = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13\n this.m21 = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23\n this.m31 = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33\n this.m02 = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03\n this.m12 = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13\n this.m22 = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23\n this.m32 = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33\n this.m03 = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03\n this.m13 = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13\n this.m23 = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23\n this.m33 = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33\n return this\n }\n\n invert(): this {\n // prettier-ignore\n const [\n a00, a01, a02, a03,\n a10, a11, a12, a13,\n a20, a21, a22, a23,\n a30, a31, a32, a33,\n ] = this\n const b00 = a00 * a11 - a01 * a10\n const b01 = a00 * a12 - a02 * a10\n const b02 = a00 * a13 - a03 * a10\n const b03 = a01 * a12 - a02 * a11\n const b04 = a01 * a13 - a03 * a11\n const b05 = a02 * a13 - a03 * a12\n const b06 = a20 * a31 - a21 * a30\n const b07 = a20 * a32 - a22 * a30\n const b08 = a20 * a33 - a23 * a30\n const b09 = a21 * a32 - a22 * a31\n const b10 = a21 * a33 - a23 * a31\n const b11 = a22 * a33 - a23 * a32\n // Calculate the determinant\n const det =\n b00 * b11 -\n b01 * b10 +\n b02 * b09 +\n b03 * b08 -\n b04 * b07 +\n b05 * b06\n if (!det) {\n return this\n }\n const invDet = 1.0 / det\n\n this[0] = (a11 * b11 - a12 * b10 + a13 * b09) * invDet\n this[1] = (a02 * b10 - a01 * b11 - a03 * b09) * invDet\n this[2] = (a31 * b05 - a32 * b04 + a33 * b03) * invDet\n this[3] = (a22 * b04 - a21 * b05 - a23 * b03) * invDet\n this[4] = (a12 * b08 - a10 * b11 - a13 * b07) * invDet\n this[5] = (a00 * b11 - a02 * b08 + a03 * b07) * invDet\n this[6] = (a32 * b02 - a30 * b05 - a33 * b01) * invDet\n this[7] = (a20 * b05 - a22 * b02 + a23 * b01) * invDet\n this[8] = (a10 * b10 - a11 * b08 + a13 * b06) * invDet\n this[9] = (a01 * b08 - a00 * b10 - a03 * b06) * invDet\n this[10] = (a30 * b04 - a31 * b02 + a33 * b00) * invDet\n this[11] = (a21 * b02 - a20 * b04 - a23 * b00) * invDet\n this[12] = (a11 * b07 - a10 * b09 - a12 * b06) * invDet\n this[13] = (a00 * b09 - a01 * b07 + a02 * b06) * invDet\n this[14] = (a31 * b01 - a30 * b03 - a32 * b00) * invDet\n this[15] = (a20 * b03 - a21 * b01 + a22 * b00) * invDet\n return this\n }\n\n get translation(): TgdVec3 {\n const { m30, m31, m32 } = this\n return new TgdVec3(m30, m31, m32)\n }\n set translation(vec: TgdVec3 | TgdVec4) {\n this.m30 = vec.x\n this.m31 = vec.y\n this.m32 = vec.z\n }\n\n from(mat: TgdMat4): this {\n this.m00 = mat.m00\n this.m01 = mat.m01\n this.m02 = mat.m02\n this.m03 = mat.m03\n this.m10 = mat.m10\n this.m11 = mat.m11\n this.m12 = mat.m12\n this.m13 = mat.m13\n this.m20 = mat.m20\n this.m21 = mat.m21\n this.m22 = mat.m22\n this.m23 = mat.m23\n this.m30 = mat.m30\n this.m31 = mat.m31\n this.m32 = mat.m32\n this.m33 = mat.m33\n return this\n }\n\n fromMat3(mat: TgdMat3 | TgdMat4): this {\n this.m00 = mat.m00\n this.m01 = mat.m01\n this.m02 = mat.m02\n this.m10 = mat.m10\n this.m11 = mat.m11\n this.m12 = mat.m12\n this.m20 = mat.m20\n this.m21 = mat.m21\n this.m22 = mat.m22\n return this\n }\n\n toAxis(axisX: TgdVec3, axisY: TgdVec3, axisZ: TgdVec3): this {\n this.toAxisX(axisX)\n this.toAxisY(axisY)\n return this.toAxisZ(axisZ)\n }\n\n toAxisX(axisX: TgdVec3): this {\n axisX.x = this.m00\n axisX.y = this.m01\n axisX.z = this.m02\n return this\n }\n\n toAxisY(axisY: TgdVec3): this {\n axisY.x = this.m10\n axisY.y = this.m11\n axisY.z = this.m12\n return this\n }\n\n toAxisZ(axisZ: TgdVec3): this {\n axisZ.x = this.m20\n axisZ.y = this.m21\n axisZ.z = this.m22\n return this\n }\n\n fromQuat({ x, y, z, w }: TgdQuat): this {\n const x2 = x + x\n const y2 = y + y\n const z2 = z + z\n const xx = x * x2\n const yx = y * x2\n const yy = y * y2\n const zx = z * x2\n const zy = z * y2\n const zz = z * z2\n const wx = w * x2\n const wy = w * y2\n const wz = w * z2\n\n this.m00 = 1 - yy - zz\n this.m10 = yx - wz\n this.m20 = zx + wy\n\n this.m01 = yx + wz\n this.m11 = 1 - xx - zz\n this.m21 = zy - wx\n\n this.m02 = zx - wy\n this.m12 = zy + wx\n this.m22 = 1 - xx - yy\n\n return this\n }\n\n get m00() {\n return this[0]\n }\n set m00(v: number) {\n this[0] = v\n }\n\n get m01() {\n return this[1]\n }\n set m01(v: number) {\n this[1] = v\n }\n\n get m02() {\n return this[2]\n }\n set m02(v: number) {\n this[2] = v\n }\n\n get m03() {\n return this[3]\n }\n set m03(v: number) {\n this[3] = v\n }\n\n get m10() {\n return this[4]\n }\n set m10(v: number) {\n this[4] = v\n }\n\n get m11() {\n return this[5]\n }\n set m11(v: number) {\n this[5] = v\n }\n\n get m12() {\n return this[6]\n }\n set m12(v: number) {\n this[6] = v\n }\n\n get m13() {\n return this[7]\n }\n set m13(v: number) {\n this[7] = v\n }\n\n get m20() {\n return this[8]\n }\n set m20(v: number) {\n this[8] = v\n }\n\n get m21() {\n return this[9]\n }\n set m21(v: number) {\n this[9] = v\n }\n\n get m22() {\n return this[10]\n }\n set m22(v: number) {\n this[10] = v\n }\n\n get m23() {\n return this[11]\n }\n set m23(v: number) {\n this[11] = v\n }\n\n get m30() {\n return this[12]\n }\n set m30(v: number) {\n this[12] = v\n }\n\n get m31() {\n return this[13]\n }\n set m31(v: number) {\n this[13] = v\n }\n\n get m32() {\n return this[14]\n }\n set m32(v: number) {\n this[14] = v\n }\n\n get m33() {\n return this[15]\n }\n set m33(v: number) {\n this[15] = v\n }\n\n debug(caption = \"Mat4\") {\n const c0 = padColOfNumbers([this.m00, this.m01, this.m02, this.m03])\n const c1 = padColOfNumbers([this.m10, this.m11, this.m12, this.m13])\n const c2 = padColOfNumbers([this.m20, this.m21, this.m22, this.m23])\n const c3 = padColOfNumbers([this.m30, this.m31, this.m32, this.m33])\n\n console.log(caption)\n console.log(\" \", [c0[0], c1[0], c2[0], c3[0]].join(\" | \"))\n console.log(\" \", [c0[1], c1[1], c2[1], c3[1]].join(\" | \"))\n console.log(\" \", [c0[2], c1[2], c2[2], c3[2]].join(\" | \"))\n console.log(\" \", [c0[3], c1[3], c2[3], c3[3]].join(\" | \"))\n }\n}\n","import { TgdMat4 } from \"./mat4\"\nimport { TgdVec3 } from \"./vec3\"\n\nexport class TgdVec4 extends Float32Array {\n constructor()\n constructor(vec4: TgdVec4)\n constructor(vec3: TgdVec3, w: number)\n constructor(x: number)\n constructor(x: number, y: number)\n constructor(x: number, y: number, z: number)\n constructor(x: number, y: number, z: number, w: number)\n constructor(\n x: number | TgdVec4 | TgdVec3 = 0,\n y: number = 0,\n z: number = 0,\n w: number = 1\n ) {\n super(4)\n if (x instanceof TgdVec4) {\n this.x = x.x\n this.y = x.y\n this.z = x.z\n this.w = x.w\n return\n }\n if (x instanceof TgdVec3) {\n this.x = x.x\n this.y = x.y\n this.z = x.z\n this.w = w\n return\n }\n this.x = x\n this.y = y\n this.z = z\n this.w = w\n }\n\n reset(x = 0, y = 0, z = 0, w = 1): this {\n this.x = x\n this.y = y\n this.z = z\n this.w = w\n return this\n }\n\n from(vec: TgdVec4): this {\n this.x = vec.x\n this.y = vec.y\n this.z = vec.z\n this.w = vec.w\n return this\n }\n\n clone() {\n return new TgdVec4(this)\n }\n\n isEqual({ x, y, z, w }: TgdVec4) {\n if (x !== this.x) return false\n if (y !== this.y) return false\n if (z !== this.z) return false\n if (w !== this.w) return false\n return true\n }\n\n isClose({ x, y, z, w }: TgdVec4, epsilon = 1e-6) {\n if (Math.abs(x - this.x) > epsilon) return false\n if (Math.abs(y - this.y) > epsilon) return false\n if (Math.abs(z - this.z) > epsilon) return false\n if (Math.abs(w - this.w) > epsilon) return false\n return true\n }\n\n /**\n * V := M×V\n */\n applyMatrix(mat: TgdMat4): this {\n const { x, y, z, w } = this\n this.x = x * mat.m00 + y * mat.m10 + z * mat.m20 + w * mat.m30\n this.y = x * mat.m01 + y * mat.m11 + z * mat.m21 + w * mat.m31\n this.z = x * mat.m02 + y * mat.m12 + z * mat.m22 + w * mat.m32\n this.w = x * mat.m03 + y * mat.m13 + z * mat.m23 + w * mat.m33\n return this\n }\n\n get x() {\n return this[0]\n }\n set x(value: number) {\n this[0] = value\n }\n\n get y() {\n return this[1]\n }\n set y(value: number) {\n this[1] = value\n }\n\n get z() {\n return this[2]\n }\n set z(value: number) {\n this[2] = value\n }\n\n get w() {\n return this[3]\n }\n set w(value: number) {\n this[3] = value\n }\n\n add(...vectors: TgdVec4[]): TgdVec4 {\n for (const vec of vectors) {\n this[0] += vec[0]\n this[1] += vec[1]\n this[2] += vec[2]\n this[3] += vec[3]\n }\n return this\n }\n\n subtract(vec: TgdVec4): TgdVec4 {\n this[0] -= vec[0]\n this[1] -= vec[1]\n this[2] -= vec[2]\n this[3] -= vec[3]\n return this\n }\n\n scale(factor: number): this {\n this[0] *= factor\n this[1] *= factor\n this[2] *= factor\n this[3] *= factor\n return this\n }\n\n dot(vec: TgdVec4): number {\n return (\n this[0] * vec[0] +\n this[1] * vec[1] +\n this[2] * vec[2] +\n this[3] * vec[3]\n )\n }\n\n get size() {\n return Math.sqrt(\n this[0] * this[0] +\n this[1] * this[1] +\n this[2] * this[2] +\n this[3] * this[3]\n )\n }\n\n normalize(): this {\n const squareLength =\n this[0] * this[0] +\n this[1] * this[1] +\n this[2] * this[2] +\n this[3] * this[3]\n if (squareLength === 0) return this\n\n return this.scale(1 / Math.sqrt(squareLength))\n }\n\n debug(caption = \"vec4\") {\n const { x, y, z, w } = this\n const out: string[] = [x, y, z, w].map(n => n.toFixed(6))\n console.log(`${caption}: `, out.join(\" | \"))\n }\n}\n","import { TgdVec3 } from \"./vec3\"\nimport { TgdVec4 } from \"./vec4\"\n\nexport type TgdQuatFace = keyof typeof FACES\n\nexport class TgdQuat extends TgdVec4 {\n constructor()\n constructor(source: TgdQuat)\n constructor(source: TgdVec4)\n constructor(x: number)\n constructor(x: number, y: number)\n constructor(x: number, y: number, z: number)\n constructor(x: number, y: number, z: number, w: number)\n constructor(\n x: number | TgdVec4 = 0,\n y: number = 0,\n z: number = 0,\n w: number = 1\n ) {\n if (typeof x === \"number\") super(x, y, z, w)\n else super(x)\n }\n\n clone(): TgdQuat {\n return new TgdQuat(this)\n }\n\n multiply(quat: TgdQuat): TgdQuat {\n const [qx, qy, qz, qw] = this\n const [rx, ry, rz, rw] = quat\n this[0] = rw * qx + rx * qw - ry * qz + rz * qy\n this[1] = rw * qy + rx * qz + ry * qw - rz * qx\n this[2] = rw * qz - rx * qy + ry * qx + rz * qw\n this[3] = rw * qw - rx * qx - ry * qy - rz * qz\n return this\n }\n\n fromAxis(X: TgdVec3, Y: TgdVec3, Z: TgdVec3): this {\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n const fTrace = X.x + Y.y + Z.z\n if (fTrace > 0.0) {\n // |w| > 1/2, may as well choose w > 1/2\n const fRoot = Math.sqrt(fTrace + 1.0) // 2w\n this.w = 0.5 * fRoot\n const halfRoot = 0.5 / fRoot // 1/(4w)\n this.x = (Y.z - Z.y) * halfRoot\n this.y = (Z.x - X.z) * halfRoot\n this.z = (X.y - Y.x) * halfRoot\n } else {\n // |w| <= 1/2\n const axis = [X, Y, Z]\n let i = 0\n if (Y.y > X.x) i = 1\n if (Z.z > axis[i][i]) i = 2\n const j = (i + 1) % 3\n const k = (i + 2) % 3\n\n let fRoot = Math.sqrt(axis[i][i] - axis[j][j] - axis[k][k] + 1.0)\n this[i] = 0.5 * fRoot\n fRoot = 0.5 / fRoot\n this[3] = (axis[j][k] - axis[k][j]) * fRoot\n this[j] = (axis[j][i] + axis[i][j]) * fRoot\n this[k] = (axis[k][i] + axis[i][k]) * fRoot\n }\n return this.normalize()\n }\n\n rotateAroundX(angleInRadians: number): this {\n const rad = angleInRadians * 0.5\n\n const ax = this[0]\n const ay = this[1]\n const az = this[2]\n const aw = this[3]\n const bx = Math.sin(rad)\n const bw = Math.cos(rad)\n\n this[0] = ax * bw + aw * bx\n this[1] = ay * bw + az * bx\n this[2] = az * bw - ay * bx\n this[3] = aw * bw - ax * bx\n return this\n }\n\n rotateAroundY(angleInRadians: number): this {\n const rad = angleInRadians * 0.5\n\n const ax = this[0]\n const ay = this[1]\n const az = this[2]\n const aw = this[3]\n const by = Math.sin(rad)\n const bw = Math.cos(rad)\n\n this[0] = ax * bw - az * by\n this[1] = ay * bw + aw * by\n this[2] = az * bw + ax * by\n this[3] = aw * bw - ay * by\n return this\n }\n\n rotateAroundZ(angleInRadians: number): this {\n const rad = angleInRadians * 0.5\n\n const ax = this[0]\n const ay = this[1]\n const az = this[2]\n const aw = this[3]\n const bz = Math.sin(rad)\n const bw = Math.cos(rad)\n\n this[0] = ax * bw + ay * bz\n this[1] = ay * bw - ax * bz\n this[2] = az * bw + aw * bz\n this[3] = aw * bw - az * bz\n return this\n }\n\n toAxisZ(vec: TgdVec3 | TgdVec4): typeof vec {\n const { x, y, z, w } = this\n const x2 = x + x\n const y2 = y + y\n const xx = x * x2\n const yy = y * y2\n const zx = z * x2\n const zy = z * y2\n const wx = w * x2\n const wy = w * y2\n\n vec.x = zx + wy\n vec.y = zy - wx\n vec.z = 1 - xx - yy\n\n return vec\n }\n\n face(face: TgdQuatFace = \"+X+Y+Z\"): this {\n const [x, y, z, w] = FACES[face]\n this.x = x\n this.y = y\n this.z = z\n this.w = w\n return this\n }\n}\n\nconst A = Math.sqrt(2) / 2\nconst H = 0.5\n\nconst FACES = {\n \"+X+Y+Z\": [+0, +0, +0, +1],\n \"-Z+Y+X\": [+0, +A, +0, +A],\n \"-X+Y-Z\": [+0, +1, +0, +0],\n \"+Z+Y-X\": [+0, -A, +0, +A],\n \"+X+Z-Y\": [+A, +0, +0, +A],\n \"+Y+Z+X\": [+H, +H, +H, +H],\n \"-X+Z+Y\": [+0, +A, +A, +0],\n \"-Y+Z-X\": [+H, -H, -H, +H],\n \"+X-Y-Z\": [+1, +0, +0, +0],\n \"+X-Z+Y\": [-A, +0, +0, +A],\n \"-X-Y+Z\": [+0, +0, +1, +0],\n \"-X-Z-Y\": [+0, +A, -A, +0],\n \"+Y+X-Z\": [+A, +A, +0, +0],\n \"+Y-X+Z\": [+0, +0, +A, +A],\n \"+Y-Z-X\": [+H, +H, -H, -H],\n \"-Y+X+Z\": [+0, +0, -A, +A],\n \"-Y-X-Z\": [+A, -A, +0, +0],\n \"-Y-Z+X\": [+H, -H, +H, -H],\n \"+Z+X+Y\": [+H, +H, +H, -H],\n \"+Z-X-Y\": [+H, -H, +H, +H],\n \"+Z-Y+X\": [+A, +0, +A, +0],\n \"-Z+X-Y\": [+H, +H, -H, +H],\n \"-Z-X+Y\": [+H, -H, -H, -H],\n \"-Z-Y-X\": [+A, +0, -A, +0],\n}\n","import { padColOfNumbers } from \"@/debug\"\nimport { TgdQuat, TgdVec3 } from \".\"\n\n/**\n * Column-first 4x4 matrix.\n *\n * `m23` means column 2 and row 3.\n *\n * This is not the same as what mathematicians are used to,\n * but its how WebGL will store matrices in memory.\n */\nexport class TgdMat3 extends Float32Array {\n constructor()\n constructor(mat: TgdMat3)\n constructor(\n m00: number,\n m01: number,\n m02: number,\n m10: number,\n m11: number,\n m12: number,\n m20: number,\n m21: number,\n m22: number\n )\n constructor(\n m00: number | TgdMat3 = 1,\n m01: number = 0,\n m02: number = 0,\n m10: number = 0,\n m11: number = 1,\n m12: number = 0,\n m20: number = 0,\n m21: number = 0,\n m22: number = 1\n ) {\n if (typeof m00 === \"number\") {\n super([m00, m01, m02, m10, m11, m12, m20, m21, m22])\n } else {\n super(m00)\n }\n }\n\n transpose(): TgdMat3 {\n let tmp = this.m10\n this.m10 = this.m01\n this.m01 = tmp\n tmp = this.m20\n this.m20 = this.m02\n this.m02 = tmp\n tmp = this.m21\n this.m21 = this.m12\n this.m12 = tmp\n return this\n }\n\n fromQuat({ x, y, z, w }: TgdQuat): TgdMat3 {\n const x2 = x + x\n const y2 = y + y\n const z2 = z + z\n const xx = x * x2\n const yx = y * x2\n const yy = y * y2\n const zx = z * x2\n const zy = z * y2\n const zz = z * z2\n const wx = w * x2\n const wy = w * y2\n const wz = w * z2\n\n this.m00 = 1 - yy - zz\n this.m10 = yx - wz\n this.m20 = zx + wy\n\n this.m01 = yx + wz\n this.m11 = 1 - xx - zz\n this.m21 = zy - wx\n\n this.m02 = zx - wy\n this.m12 = zy + wx\n this.m22 = 1 - xx - yy\n\n return this\n }\n\n toAxis(axisX: TgdVec3, axisY: TgdVec3, axisZ: TgdVec3) {\n this.toAxisX(axisX)\n this.toAxisY(axisY)\n return this.toAxisZ(axisZ)\n }\n\n toAxisX(axisX: TgdVec3) {\n axisX.x = this.m00\n axisX.y = this.m01\n axisX.z = this.m02\n return this\n }\n\n toAxisY(axisY: TgdVec3) {\n axisY.x = this.m10\n axisY.y = this.m11\n axisY.z = this.m12\n return this\n }\n\n toAxisZ(axisZ: TgdVec3) {\n axisZ.x = this.m20\n axisZ.y = this.m21\n axisZ.z = this.m22\n return this\n }\n\n scale(factor: number): this {\n this[0] *= factor\n this[1] *= factor\n this[2] *= factor\n this[3] *= factor\n this[4] *= factor\n this[5] *= factor\n this[6] *= factor\n this[7] *= factor\n this[8] *= factor\n return this\n }\n\n get m00() {\n return this[0]\n }\n set m00(v: number) {\n this[0] = v\n }\n\n get m01() {\n return this[1]\n }\n set m01(v: number) {\n this[1] = v\n }\n\n get m02() {\n return this[2]\n }\n set m02(v: number) {\n this[2] = v\n }\n\n get m10() {\n return this[3]\n }\n set m10(v: number) {\n this[3] = v\n }\n\n get m11() {\n return this[4]\n }\n set m11(v: number) {\n this[4] = v\n }\n\n get m12() {\n return this[5]\n }\n set m12(v: number) {\n this[5] = v\n }\n\n get m20() {\n return this[6]\n }\n set m20(v: number) {\n this[6] = v\n }\n\n get m21() {\n return this[7]\n }\n set m21(v: number) {\n this[7] = v\n }\n\n get m22() {\n return this[8]\n }\n set m22(v: number) {\n this[8] = v\n }\n\n debug(caption = \"Mat3\") {\n const c0 = padColOfNumbers([this.m00, this.m01, this.m02])\n const c1 = padColOfNumbers([this.m10, this.m11, this.m12])\n const c2 = padColOfNumbers([this.m20, this.m21, this.m22])\n\n console.log(caption)\n console.log(\" \", [c0[0], c1[0], c2[0]].join(\" | \"))\n console.log(\" \", [c0[1], c1[1], c2[1]].join(\" | \"))\n console.log(\" \", [c0[2], c1[2], c2[2]].join(\" | \"))\n }\n}\n","import { TgdQuat, TgdVec3, TgdMat4, TgdVec4, TgdQuatFace } from \"@/math\"\nimport { TgdMat3 } from \"@/math/mat3\"\n\nexport abstract class TgdCamera {\n protected dirtyProjection = true\n\n private _screenWidth = 1920\n private _screenHeight = 1080\n private _screenAspectRatio = 1920 / 1080\n\n /** Do we need recalculation? */\n private dirty = true\n private dirtyAxis = true\n private readonly axisX = new TgdVec3()\n private readonly axisY = new TgdVec3()\n private readonly axisZ = new TgdVec3()\n // transformation\n private readonly _matrixViewModel = new TgdMat4()\n private readonly orientation = new TgdQuat(0, 0, 0, 1)\n private readonly target = new TgdVec3(0, 0, 0)\n private _distance = 10\n private _zoom = 1\n // For fast calculations (we don't want to recreate them).\n private readonly tmpMat3 = new TgdMat3()\n private readonly tmpVec3 = new TgdVec3()\n\n constructor() {\n this.face(\"+X+Y+Z\")\n }\n\n get screenAspectRatio() {\n return this._screenAspectRatio\n }\n\n get screenWidth() {\n return this._screenWidth\n }\n set screenWidth(v: number) {\n if (v === this._screenWidth) return\n\n this._screenWidth = v\n this.dirtyProjection = true\n this._screenAspectRatio = this._screenWidth / this._screenHeight\n }\n\n get screenHeight() {\n return this._screenHeight\n }\n set screenHeight(v: number) {\n if (v === this._screenHeight) return\n\n this._screenHeight = v\n this.dirtyProjection = true\n this._screenAspectRatio = this._screenWidth / this._screenHeight\n }\n\n face(face: TgdQuatFace) {\n this.orientation.face(face)\n this.dirty = true\n this.dirtyAxis = true\n }\n\n from(camera: TgdCamera): this {\n const {\n orientation,\n target,\n distance,\n zoom,\n screenWidth,\n screenHeight,\n } = camera\n this.orientation.from(orientation)\n this.target.from(target)\n this.distance = distance\n this.zoom = zoom\n this.screenWidth = screenWidth\n this.screenHeight = screenHeight\n this.dirty = true\n this.dirtyAxis = true\n this.copyProjectionFrom(camera)\n return this\n }\n\n abstract copyProjectionFrom(camera: TgdCamera): this\n\n /**\n * Copy the orientation from another camera.\n */\n copyOrientationFrom({ orientation }: TgdCamera) {\n this.setOrientation(orientation)\n }\n\n toAxisX(axisX: TgdVec3): this {\n this.updateAxisIfNeeded()\n axisX.from(this.axisX)\n return this\n }\n\n toAxisY(axisY: TgdVec3): this {\n this.updateAxisIfNeeded()\n axisY.from(this.axisY)\n return this\n }\n\n toAxisZ(axisZ: TgdVec3): this {\n this.updateAxisIfNeeded()\n axisZ.from(this.axisZ)\n return this\n }\n\n get matrixViewModel(): TgdMat4 {\n this.updateIfNeeded()\n return this._matrixViewModel\n }\n\n abstract get matrixProjection(): TgdMat4\n\n setOrientation(quat: TgdQuat) {\n const { orientation } = this\n if (quat.isEqual(orientation)) return\n\n const [x, y, z, w] = quat\n orientation.x = x\n orientation.y = y\n orientation.z = z\n orientation.w = w\n this.dirty = true\n this.dirtyAxis = true\n }\n\n setTarget(vec: TgdVec3) {\n const { target } = this\n if (vec.isEqual(target)) return\n\n const [x, y, z] = vec\n target.x = x\n target.y = y\n target.z = z\n this.dirty = true\n }\n\n get x() {\n return this.target.x\n }\n set x(v: number) {\n const { target } = this\n if (v === target.x) return\n\n target.x = v\n this.dirty = true\n }\n\n get y() {\n return this.target.y\n }\n set y(v: number) {\n const { target } = this\n if (v === target.y) return\n\n target.y = v\n this.dirty = true\n }\n\n get z() {\n return this.target.z\n }\n set z(v: number) {\n const { target } = this\n if (v === target.z) return\n\n target.z = v\n this.dirty = true\n }\n\n get distance() {\n return this._distance\n }\n set distance(v: number) {\n if (this._distance === v) return\n\n this._distance = v\n this.dirty = true\n }\n\n get zoom() {\n return this._zoom\n }\n set zoom(v: number) {\n if (this._zoom === v) return\n\n this._zoom = v\n this.dirty = true\n }\n\n /**\n * Add (x,y,z) to the target coords in Camera space.\n * That means we are moving along the camera axis.\n */\n moveTarget(x: number, y: number, z: number) {\n const { target } = this\n this.updateAxisIfNeeded()\n const { axisX, axisY, axisZ, tmpVec3 } = this\n tmpVec3\n .from(axisX)\n .scale(x)\n .addWithScale(axisY, y)\n .addWithScale(axisZ, z)\n target.x += tmpVec3.x\n target.y += tmpVec3.y\n target.z += tmpVec3.z\n this.dirty = true\n }\n\n orbitAroundX(angleInRadians: number): this {\n this.updateAxisIfNeeded()\n const { axisX, axisY, axisZ, orientation } = this\n axisY.rotateAround(axisX, angleInRadians)\n axisZ.rotateAround(axisX, angleInRadians)\n orientation.fromAxis(axisX, axisY, axisZ)\n this.dirty = true\n return this\n }\n\n orbitAroundY(angleInRadians: number): this {\n this.updateAxisIfNeeded()\n const { axisX, axisY, axisZ, orientation } = this\n axisX.rotateAround(axisY, angleInRadians)\n axisZ.rotateAround(axisY, angleInRadians)\n orientation.fromAxis(axisX, axisY, axisZ)\n this.dirty = true\n return this\n }\n\n orbitAroundZ(angleInRadians: number): this {\n this.updateAxisIfNeeded()\n const { axisX, axisY, axisZ, orientation } = this\n axisX.rotateAround(axisZ, angleInRadians)\n axisY.rotateAround(axisZ, angleInRadians)\n orientation.fromAxis(axisX, axisY, axisZ)\n this.dirty = true\n return this\n }\n\n debug(caption = \"Camera\") {\n this.orientation.debug(`${caption} quaternion:`)\n }\n\n private updateAxisIfNeeded() {\n if (this.dirtyAxis) this.updateAxis()\n }\n\n private updateAxis() {\n const { tmpMat3 } = this\n tmpMat3.fromQuat(this.orientation)\n tmpMat3.toAxis(this.axisX, this.axisY, this.axisZ)\n this.dirtyAxis = false\n\n if (\n Math.abs(1 - this.axisX.size) > 0.1 ||\n Math.abs(1 - this.axisY.size) > 0.1 ||\n Math.abs(1 - this.axisZ.size) > 0.1\n ) {\n this.axisX.debug(\"Axis X\")\n this.axisY.debug(\"Axis Y\")\n this.axisZ.debug(\"Axis Z\")\n throw Error(\"STOP!\")\n }\n }\n\n private updateIfNeeded(): void {\n if (!this.dirty) return\n\n const { tmpMat3, tmpVec3 } = this\n const mat = this._matrixViewModel\n this.updateAxis()\n const d = this._distance\n const { x: tx, y: ty, z: tz } = this.target\n const { x: ax, y: ay, z: az } = this.axisZ\n tmpVec3.x = tx + d * ax\n tmpVec3.y = ty + d * ay\n tmpVec3.z = tz + d * az\n tmpVec3.applyMatrix(tmpMat3.transpose()).scale(-1 / this.zoom)\n mat.m30 = tmpVec3.x\n mat.m31 = tmpVec3.y\n mat.m32 = tmpVec3.z\n const zoom = this._zoom\n if (zoom !== 1) tmpMat3.scale(zoom)\n mat.fromMat3(tmpMat3)\n this.dirty = false\n }\n}\n","import { TgdMat4 } from \"@/math\"\nimport { TgdCamera } from \"./camera\"\n\nexport class TgdCameraOrthographic extends TgdCamera {\n private readonly _matrixProjection = new TgdMat4()\n private _spaceHeight = 10\n private _near = 1e-3\n private _far = 1e3\n\n constructor() {\n super()\n }\n\n copyProjectionFrom(camera: TgdCameraOrthographic): this {\n this.spaceHeight = camera.spaceHeight\n return this\n }\n\n get spaceHeight() {\n return this._spaceHeight\n }\n set spaceHeight(v: number) {\n if (v === this._spaceHeight) return\n\n this._spaceHeight = v\n this.dirtyProjection = true\n }\n\n get near() {\n return this._near\n }\n set near(v: number) {\n if (v === this._near) return\n\n this._near = v\n this.dirtyProjection = true\n }\n\n get far() {\n return this._far\n }\n set far(v: number) {\n if (v === this._far) return\n\n this._far = v\n this.dirtyProjection = true\n }\n\n get matrixProjection(): TgdMat4 {\n this.updateProjectionIfNeeded()\n return this._matrixProjection\n }\n\n private updateProjectionIfNeeded(): void {\n if (!this.dirtyProjection) return\n\n const { near, far, screenAspectRatio, _spaceHeight } = this\n const top = _spaceHeight * 0.5\n const bottom = -top\n const right = top * screenAspectRatio\n const left = -right\n const out = this._matrixProjection\n const lr = 1 / (left - right)\n const bt = 1 / (bottom - top)\n const nf = 1 / (near - far)\n out[0] = -2 * lr\n out[1] = 0\n out[2] = 0\n out[3] = 0\n out[4] = 0\n out[5] = -2 * bt\n out[6] = 0\n out[7] = 0\n out[8] = 0\n out[9] = 0\n out[10] = nf\n out[11] = 0\n out[12] = (left + right) * lr\n out[13] = (top + bottom) * bt\n out[14] = near * nf\n out[15] = 1\n this.dirtyProjection = true\n }\n}\n","import { TgdMat4 } from \"@/math\"\nimport { TgdCamera } from \"./camera\"\n\nexport class TgdCameraPerspective extends TgdCamera {\n private readonly _matrixProjection = new TgdMat4()\n private _fovy = Math.PI / 4\n private _near = 1e-3\n private _far = Infinity\n\n constructor() {\n super()\n }\n\n copyProjectionFrom(camera: TgdCameraPerspective): this {\n this.fovy = camera.fovy\n this.near = camera.near\n this.far = camera.far\n return this\n }\n\n get fovy() {\n return this._fovy\n }\n set fovy(v: number) {\n if (v === this._fovy) return\n\n this._fovy = v\n this.dirtyProjection = true\n }\n get near() {\n return this._near\n }\n set near(v: number) {\n if (v === this._near) return\n\n this._near = v\n this.dirtyProjection = true\n }\n get far() {\n return this._far\n }\n set far(v: number) {\n if (v === this._far) return\n\n this._far = v\n this.dirtyProjection = true\n }\n get matrixProjection(): TgdMat4 {\n this.updateProjectionIfNeeded()\n return this._matrixProjection\n }\n\n private updateProjectionIfNeeded(): void {\n if (!this.dirtyProjection) return\n\n const fovy = this._fovy\n const aspect = this.screenAspectRatio\n const near = this._near\n const far = this._far\n const out = this._matrixProjection\n const f = 1.0 / Math.tan(fovy / 2)\n out[0] = f / aspect\n out[1] = 0\n out[2] = 0\n out[3] = 0\n out[4] = 0\n out[5] = f\n out[6] = 0\n out[7] = 0\n out[8] = 0\n out[9] = 0\n out[11] = -1\n out[12] = 0\n out[13] = 0\n out[15] = 0\n if (far !== Infinity) {\n const nf = 1 / (near - far)\n out[10] = (far + near) * nf\n out[14] = 2 * far * near * nf\n } else {\n out[10] = -1\n out[14] = -2 * near\n }\n this.dirtyProjection = true\n }\n}\n","export abstract class TgdPainter {\n abstract delete(): void\n abstract paint(time: number, delay: number): void\n}\n","import { TgdPainterFunction } from \"@/types/painter\"\nimport { TgdPainter } from \"./painter\"\n\nexport type TgdPainterGroupOptions = {\n onEnter?(time: number, delay: number): void\n onExit?(time: number, delay: number): void\n}\n\n/**\n * Group several painters together.\n */\nexport class TgdPainterGroup extends TgdPainter {\n public active = true\n public onEnter: TgdPainterFunction | undefined\n public onExit: TgdPainterFunction | undefined\n private readonly painters: TgdPainter[]\n\n constructor(\n painters: TgdPainter[] = [],\n { onEnter, onExit }: TgdPainterGroupOptions = {}\n ) {\n super()\n this.onEnter = onEnter\n this.onExit = onExit\n this.painters = [...painters]\n }\n\n has(painter: TgdPainter): boolean {\n return this.painters.includes(painter)\n }\n\n add(...painters: TgdPainter[]) {\n for (const painter of painters) {\n this.painters.push(painter)\n }\n }\n\n remove(...painters: TgdPainter[]) {\n for (const painter of painters) {\n const index = this.painters.indexOf(painter)\n if (index < 0) continue\n\n this.painters.splice(index, 1)\n painter.delete()\n }\n }\n\n removeAll() {\n for (const painter of this.painters) {\n painter.delete()\n }\n this.painters.splice(0, this.painters.length)\n }\n\n delete(): void {\n for (const painter of this.painters) {\n painter.delete()\n }\n this.painters.splice(0, this.painters.length)\n }\n\n paint(time: number, delay: number): void {\n if (!this.active) return\n\n this.onEnter?.(time, delay)\n for (const painter of this.painters) {\n painter.paint(time, delay)\n }\n this.onExit?.(time, delay)\n }\n}\n","let counter = 1\n\n/**\n * This class deals with WebGL resources.\n *\n * It prevents you from creatng multiple times the\n * same resource by holding an internal ref counter.\n */\nexport abstract class TgdResource<InputType, OutputType> {\n private readonly keys = new Map<OutputType, string>()\n private readonly objects = new Map<string, OutputType>()\n private readonly references = new Map<string, number>()\n\n create(input: InputType, id?: string): OutputType {\n const key =\n id ?? this.makeKeyFromInput(input) ?? `TgdResource:${counter++}`\n const refCount = this.references.get(key) ?? 0\n if (refCount < 1) {\n const object = this.actualCreate(input, key)\n this.keys.set(object, key)\n this.objects.set(key, object)\n this.references.set(key, 1)\n return object\n }\n const object = this.objects.get(key)\n if (!object) throw Error(\"[TgdResource.create] Panic!\")\n\n this.references.set(key, refCount + 1)\n return object\n }\n\n delete(object: OutputType) {\n const key = this.keys.get(object)\n if (!key) return\n\n const refCount = this.references.get(key) ?? 0\n if (refCount < 1) return\n\n if (refCount > 1) {\n this.references.set(key, refCount - 1)\n return\n }\n\n this.keys.delete(object)\n this.objects.delete(key)\n this.references.delete(key)\n this.actualDelete(object)\n }\n\n protected abstract actualCreate(input: InputType, id: string): OutputType\n\n protected abstract actualDelete(object: OutputType): void\n\n protected makeKeyFromInput(input: InputType): string | null {\n return null\n }\n}\n","import { TgdMat4, TgdVec3, TgdVec4 } from \"@/math\"\nimport { TgdProgram, TgdProgramOptions } from \"@/types\"\n\n/**\n * This class helps to manage a WebGLProgram.\n * It will report meaninfull errors and help you with\n * the uniforms.\n */\nexport class TgdProgramImpl implements TgdProgram {\n /** Access to the real WebGLProgram object. */\n public readonly program: WebGLProgram\n\n private readonly shaders: WebGLShader[]\n private readonly uniformsLocations: { [name: string]: WebGLUniformLocation }\n\n constructor(\n public readonly gl: WebGL2RenderingContext,\n code: TgdProgramOptions\n ) {\n const prg = gl.createProgram()\n if (!prg) throw Error(\"Unable to create WebGLProgram!\")\n\n const vertShader = this.createShader(\"VERTEX_SHADER\", code.vert)\n gl.attachShader(prg, vertShader)\n const fragShader = this.createShader(\"FRAGMENT_SHADER\", code.frag)\n gl.attachShader(prg, fragShader)\n gl.linkProgram(prg)\n if (!gl.getProgramParameter(prg, gl.LINK_STATUS)) {\n var info = gl.getProgramInfoLog(prg) ?? \"\"\n console.warn(info)\n const errorLines = getErrorLines(info)\n logCode(\"Vertex Shader\", code.vert, errorLines)\n logCode(\"Fragment Shader\", code.frag, errorLines)\n throw new Error(\"Could NOT link WebGL2 program!\\n\" + info)\n }\n this.program = prg\n this.shaders = [vertShader, fragShader]\n this.uniformsLocations = this.getUniformsLocations()\n }\n\n getAttribLocation(name: string): number {\n const { gl, program } = this\n const loc = gl.getAttribLocation(program, name)\n if (loc < 0) {\n throw Error(`Attribute \"${name}\" not found!`)\n }\n return loc\n }\n\n getUniformLocation(name: string): WebGLUniformLocation {\n const { uniformsLocations } = this\n const names = Object.keys(uniformsLocations)\n if (name.length === 0) {\n throw Error(\n `Uniform \"${name}\" has not been found: there is no active uniform in this program!`\n )\n }\n const location = uniformsLocations[name]\n if (!location) {\n throw Error(\n `No active uniform found with name \"${name}\"!\\nAvailable names are: ${names.join(\n \", \"\n )}.`\n )\n }\n return location\n }\n\n uniform1f(name: string, value: number) {\n const { gl } = this\n gl.uniform1f(this.getUniformLocation(name), value)\n }\n\n uniform2f(name: string, x: number, y: number) {\n const { gl } = this\n gl.uniform2f(this.getUniformLocation(name), x, y)\n }\n\n uniform3f(name: string, x: number, y: number, z: number) {\n const { gl } = this\n gl.uniform3f(this.getUniformLocation(name), x, y, z)\n }\n\n uniform3fv(name: string, vec3: TgdVec3) {\n const { gl } = this\n gl.uniform3fv(this.getUniformLocation(name), vec3)\n }\n\n uniform4f(name: string, x: number, y: number, z: number, w: number) {\n const { gl } = this\n gl.uniform4f(this.getUniformLocation(name), x, y, z, w)\n }\n\n uniform4fv(name: string, vec4: TgdVec4) {\n const { gl } = this\n gl.uniform4fv(this.getUniformLocation(name), vec4)\n }\n\n uniform1i(name: string, value: number) {\n const { gl } = this\n gl.uniform1i(this.getUniformLocation(name), value)\n }\n\n uniform2i(name: string, x: number, y: number) {\n const { gl } = this\n gl.uniform2i(this.getUniformLocation(name), x, y)\n }\n\n uniform3i(name: string, x: number, y: number, z: number) {\n const { gl } = this\n gl.uniform3i(this.getUniformLocation(name), x, y, z)\n }\n\n uniform4i(name: string, x: number, y: number, z: number, w: number) {\n const { gl } = this\n gl.uniform4i(this.getUniformLocation(name), x, y, z, w)\n }\n\n uniform1ui(name: string, value: number) {\n const { gl } = this\n gl.uniform1ui(this.getUniformLocation(name), value)\n }\n\n uniform2ui(name: string, x: number, y: number) {\n const { gl } = this\n gl.uniform2ui(this.getUniformLocation(name), x, y)\n }\n\n uniform3ui(name: string, x: number, y: number, z: number) {\n const { gl } = this\n gl.uniform3ui(this.getUniformLocation(name), x, y, z)\n }\n\n uniform4ui(name: string, x: number, y: number, z: number, w: number) {\n const { gl } = this\n gl.uniform4ui(this.getUniformLocation(name), x, y, z, w)\n }\n\n uniformMatrix4fv(name: string, mat4: TgdMat4) {\n const { gl } = this\n gl.uniformMatrix4fv(this.getUniformLocation(name), false, mat4)\n }\n\n /**\n * Use the current program.\n * This is equivalent to `gl.useProgram(program)`.\n */\n use() {\n const { gl, program } = this\n gl.useProgram(program)\n }\n\n delete() {\n const { gl } = this\n this.shaders.forEach(shader => gl.deleteShader(shader))\n gl.deleteProgram(this.program)\n }\n\n private createShader(type: ShaderType, code: string): WebGLShader {\n const { gl } = this\n const shader = gl.createShader(gl[type])\n if (!shader)\n throw Error(`Unable to create a WebGLShader of type \"${type}\"!`)\n\n gl.shaderSource(shader, code)\n gl.compileShader(shader)\n const info = gl.getShaderInfoLog(shader)\n if (info) {\n console.error(`Error in ${type} code:`, info)\n const errorLines = getErrorLines(info)\n logCode(type, code, errorLines)\n throw Error(`Unable to compile ${type}!`)\n }\n return shader\n }\n\n private getUniformsLocations() {\n const { gl, program } = this\n const count: unknown = gl.getProgramParameter(\n program,\n gl.ACTIVE_UNIFORMS\n )\n if (typeof count !== \"number\")\n throw Error(\n \"Unable to get the number of uniforms in a WebGLProgram!\"\n )\n\n const uniforms: { [name: string]: WebGLUniformLocation } = {}\n for (let index = 0; index < count; index++) {\n const uniform = gl.getActiveUniform(program, index)\n if (!uniform) continue\n\n const location = gl.getUniformLocation(program, uniform.name)\n if (location === null)\n throw Error(\n `Unable to get location for uniform \"${uniform.name}\"!`\n )\n\n uniforms[uniform.name] = location\n }\n return uniforms\n }\n}\n\ntype ShaderType = \"VERTEX_SHADER\" | \"FRAGMENT_SHADER\"\n\nconst RX_ERROR_LINE = /^ERROR:[ \\t]+([0-9]+):([0-9]+):/g\n\nfunction getErrorLines(message: string): {\n lines: number[]\n messages: string[]\n} {\n const lines: number[] = []\n const messages: string[] = []\n for (const line of message.split(\"\\n\")) {\n RX_ERROR_LINE.lastIndex = -1\n const match = RX_ERROR_LINE.exec(line)\n if (match) {\n lines.push(parseInt(match[2], 10))\n messages.push(line.substring(match[0].length).trim())\n }\n }\n return { lines, messages }\n}\n\nfunction style(background: string, bold = false) {\n return `color:#fff;background:${background};font-family:monospace;font-size:80%;font-weight:${\n bold ? \"bolder\" : \"100\"\n }`\n}\n\nfunction logCode(\n title: string,\n code: string,\n errors: { lines: number[]; messages: string[] }\n) {\n console.log(`%c${title}`, \"font-weight:bolder;font-size:120%\")\n code.split(\"\\n\").forEach((line, index) => {\n const num = index + 1\n const prefix = (num * 1e-4).toFixed(4).substring(2)\n const background = errors.lines.includes(num) ? \"#f00\" : \"#000\"\n console.log(\n `%c${prefix} %c${line}`,\n style(background),\n style(background, true)\n )\n if (errors.lines.includes(num)) {\n console.error(errors.messages[errors.lines.indexOf(num)])\n }\n })\n}\n","import { TgdProgram, TgdProgramOptions } from \"@/types\"\nimport { TgdResource } from \"./resource\"\nimport { TgdProgramImpl } from \"@/program\"\n\nexport class TgdResourceProgram extends TgdResource<\n TgdProgramOptions,\n TgdProgram\n> {\n constructor(public readonly gl: WebGL2RenderingContext) {\n super()\n }\n\n protected actualCreate(input: TgdProgramOptions): TgdProgram {\n return new TgdProgramImpl(this.gl, input)\n }\n\n protected actualDelete(program: TgdProgram): void {\n if (program instanceof TgdProgramImpl) program.delete()\n }\n\n protected makeKeyFromInput(input: TgdProgramOptions): string {\n return JSON.stringify(input)\n }\n}\n","export class TgdLoaderImage {\n /**\n * Try to load an image and return `null` in case of failure.\n * @param url URL of the image to load.\n */\n static async image(url: string): Promise<HTMLImageElement | null> {\n return new Promise(resolve => {\n const img = new Image()\n img.onload = () => resolve(img)\n img.onerror = () => {\n console.error(\"Unable to load image: \", url)\n resolve(null)\n }\n img.src = url\n })\n }\n\n static async canvas(url: string): Promise<HTMLCanvasElement | null> {\n const img = await TgdLoaderImage.image(url)\n if (!img) return null\n\n const canvas = document.createElement(\"canvas\")\n canvas.width = img.naturalWidth\n canvas.height = img.naturalHeight\n const ctx = canvas.getContext(\"2d\")\n if (!ctx) throw Error(\"Unable to get a 2D context!\")\n\n ctx.drawImage(img, 0, 0)\n return canvas\n }\n}\n","export class TgdEvent<T> {\n private readonly listeners = new Set<Listener<T>>()\n\n addListener(listener: Listener<T>) {\n this.listeners.add(listener)\n }\n\n removeListener(listener: Listener<T>) {\n this.listeners.delete(listener)\n }\n\n dispatch(value: T) {\n this.listeners.forEach(listener => listener(value))\n }\n}\n\ntype Listener<T> = (value: T) => void\n","export function tgdCreateCanvas2D(\n width: number,\n height: number,\n settings?: CanvasRenderingContext2DSettings\n): { canvas: HTMLCanvasElement; ctx: CanvasRenderingContext2D } {\n const canvas = document.createElement(\"canvas\")\n canvas.width = width\n canvas.height = height\n const ctx = canvas.getContext(\"2d\", settings)\n if (!ctx) throw Error(\"Unable to create 2D context!\")\n\n return { canvas, ctx }\n}\n","import { TgdLoaderImage } from \"@/loader\"\nimport { TgdEvent } from \"@/event/event\"\nimport {\n TgdProgram,\n TgdTexture2D,\n TgdTexture2DOptions,\n TgdContextInterface,\n} from \"@/types\"\nimport { tgdCreateCanvas2D } from \"@/utils\"\n\nconst DEFAULT_DATA = new Uint8Array([200, 200, 200, 255])\n\nexport class TgdTexture2DImpl implements TgdTexture2D {\n public readonly texture: WebGLTexture\n public readonly eventImageUpdate = new TgdEvent<TgdTexture2D>()\n\n private readonly options: TgdTexture2DOptions\n private _width = 0\n private _height = 0\n private _image:\n | null\n | ImageData\n | HTMLImageElement\n | HTMLCanvasElement\n | HTMLVideoElement\n | ImageBitmap = null\n\n constructor(\n public readonly context: TgdContextInterface,\n public readonly id: string,\n options: Partial<TgdTexture2DOptions> = {}\n ) {\n const { gl } = context\n this.options = {\n wrapS: \"REPEAT\",\n wrapT: \"REPEAT\",\n wrapR: \"REPEAT\",\n minFilter: \"NEAREST_MIPMAP_LINEAR\",\n magFilter: \"LINEAR\",\n ...options,\n }\n const texture = gl.createTexture()\n if (!texture) throw Error(\"Unable to create a WebGLTexture!\")\n\n this.texture = texture\n gl.bindTexture(gl.TEXTURE_2D, texture)\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n 1,\n 1,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n DEFAULT_DATA\n )\n\n // The texture doesn't wrap and it uses linear interpolation.\n const { wrapS, wrapT, wrapR, minFilter, magFilter } = this.options\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl[wrapS])\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl[wrapT])\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_R, gl[wrapR])\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl[minFilter])\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl[magFilter])\n if (options.image) this.loadImage(options.image)\n }\n\n makePalette(colors: string[], colums = 0) {\n const width = colums > 0 ? colums : colors.length\n const height = Math.ceil(colors.length / width)\n const { canvas, ctx } = tgdCreateCanvas2D(width, height)\n let i = 0\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n ctx.fillStyle = colors[i++]\n ctx.fillRect(x, y, 1, 1)\n }\n }\n this.loadImage(canvas)\n }\n\n fillHorizontalGradient(size: number, ...colors: string[]): void {\n this.fillGradient(size, 1, 1, 0, ...colors)\n }\n\n fillverticalGradient(size: number, ...colors: string[]): void {\n this.fillGradient(1, size, 0, 1, ...colors)\n }\n\n private fillGradient(\n width: number,\n height: number,\n dirX: number,\n dirY: number,\n ...colors: string[]\n ) {\n const { canvas, ctx } = tgdCreateCanvas2D(width, height)\n const gradient = ctx.createLinearGradient(\n 0,\n 0,\n width * dirX,\n height * dirY\n )\n for (let i = 0; i < colors.length; i++) {\n gradient.addColorStop(i / (colors.length - 1), colors[i])\n }\n ctx.fillStyle = gradient\n ctx.fillRect(0, 0, width, height)\n this.loadImage(canvas)\n\n canvas.style.position = \"fixed\"\n }\n\n delete() {\n this.context.gl.deleteTexture(this.texture)\n }\n\n get image() {\n return this._image\n }\n\n get width() {\n return this._width\n }\n\n get height() {\n return this._height\n }\n\n bind() {\n const { gl } = this.context\n gl.bindTexture(gl.TEXTURE_2D, this.texture)\n }\n\n activate(program: TgdProgram, uniformName: string, slot = 0) {\n const { context, texture } = this\n const { gl } = context\n gl.activeTexture(gl.TEXTURE0 + slot)\n gl.bindTexture(gl.TEXTURE_2D, texture)\n program.uniform1i(uniformName, slot)\n }\n\n loadImage(\n image:\n | string\n | ImageData\n | HTMLImageElement\n | HTMLCanvasElement\n | HTMLVideoElement\n | ImageBitmap\n ) {\n if (typeof image === \"string\") {\n TgdLoaderImage.image(image)\n .then(img => {\n if (img) {\n this.loadImage(img)\n this.context.paint()\n } else {\n console.error(\n \"[TgdTexture2D] Unable to load image:\",\n image\n )\n }\n })\n .catch(console.error)\n return\n }\n\n const { context, texture } = this\n const { gl } = context\n gl.bindTexture(gl.TEXTURE_2D, texture)\n if (image instanceof Image) {\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true)\n }\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n image\n )\n gl.generateMipmap(gl.TEXTURE_2D)\n this._width = image.width\n this._height = image.height\n this._image = image\n this.eventImageUpdate.dispatch(this)\n }\n}\n","import { TgdLoaderImage } from \"@/loader\"\nimport {\n TgdProgram,\n TgdTextureCube,\n TgdTextureCubeOptions,\n WebglImage,\n TgdContextInterface,\n} from \"@/types\"\n\nexport class TgdTextureCubeImpl implements TgdTextureCube {\n public readonly texture: WebGLTexture\n\n private _width = 0\n private _height = 0\n private numberOfImagesToLoad = 6\n\n constructor(\n public readonly context: TgdContextInterface,\n options: TgdTextureCubeOptions\n ) {\n const { gl } = context\n const texture = gl.createTexture()\n if (!texture) throw Error(\"Unable to create a WebGLTexture!\")\n\n this.texture = texture\n this.loadImage(gl.TEXTURE_CUBE_MAP_POSITIVE_X, options.imagePosX)\n this.loadImage(gl.TEXTURE_CUBE_MAP_NEGATIVE_X, options.imageNegX)\n this.loadImage(gl.TEXTURE_CUBE_MAP_POSITIVE_Y, options.imagePosY)\n this.loadImage(gl.TEXTURE_CUBE_MAP_NEGATIVE_Y, options.imageNegY)\n this.loadImage(gl.TEXTURE_CUBE_MAP_POSITIVE_Z, options.imagePosZ)\n this.loadImage(gl.TEXTURE_CUBE_MAP_NEGATIVE_Z, options.imageNegZ)\n }\n\n delete() {\n this.context.gl.deleteTexture(this.texture)\n }\n\n get ready() {\n return this.numberOfImagesToLoad === 0\n }\n\n get width() {\n return this._width\n }\n\n get height() {\n return this._height\n }\n\n bind() {\n const { gl } = this.context\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, this.texture)\n }\n\n activate(program: TgdProgram, uniformName: string, slot = 0) {\n if (!this.ready) return\n\n const { context, texture } = this\n const { gl } = context\n gl.activeTexture(gl.TEXTURE0 + slot)\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, texture)\n program.uniform1i(uniformName, slot)\n }\n\n private loadImage(target: number, image: string | WebglImage) {\n if (typeof image === \"string\") {\n TgdLoaderImage.image(image)\n .then(img => {\n if (img) {\n this.loadImage(target, img)\n } else {\n console.error(\n `[TgdTextureCube] Unable to load image \"${image}\":`,\n image\n )\n }\n })\n .catch(ex => {\n console.error(\n `[TgdTextureCube] Unable to load image \"${image}\":`,\n ex\n )\n })\n return\n }\n\n const { width, height } = image\n if (width !== height) {\n throw Error(\n `Images in a CubeMap must be squares, but we got ${width}×${height}!`\n )\n }\n if (this._width === 0) {\n this._width = width\n this._height = height\n } else if (this._width !== width || this._height !== height) {\n throw Error(\n `Images in a CubeMap must all have the same size, but we got ${this._width}×${this._height} and ${width}×${height}!`\n )\n }\n const { context, texture } = this\n const { gl } = context\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, texture)\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, image instanceof Image)\n gl.texImage2D(target, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image)\n this.numberOfImagesToLoad--\n if (this.numberOfImagesToLoad === 0) {\n console.log(\"All images have been loaded!\")\n console.log(this.width, this.height)\n gl.generateMipmap(gl.TEXTURE_CUBE_MAP)\n gl.texParameteri(\n gl.TEXTURE_CUBE_MAP,\n gl.TEXTURE_MIN_FILTER,\n gl.LINEAR_MIPMAP_LINEAR\n )\n context.paint()\n }\n }\n}\n","import { TgdResource } from \"@/resource/resource\"\nimport { TgdTexture2DImpl } from \"@/texture\"\nimport { TgdTexture2D, TgdTexture2DOptions, TgdContextInterface } from \"@/types\"\n\nexport class TgdResourceTexture2D extends TgdResource<\n Partial<TgdTexture2DOptions>,\n TgdTexture2D\n> {\n constructor(private readonly context: TgdContextInterface) {\n super()\n }\n\n protected actualCreate(\n input: Partial<TgdTexture2DOptions>,\n id: string\n ): TgdTexture2D {\n return new TgdTexture2DImpl(this.context, id, input)\n }\n\n protected actualDelete(object: TgdTexture2D): void {\n if (object instanceof TgdTexture2DImpl) object.delete()\n }\n}\n","import { TgdResource } from \"@/resource/resource\"\nimport { TgdTextureCubeImpl } from \"@/texture\"\nimport {\n TgdTextureCube,\n TgdTextureCubeOptions,\n TgdContextInterface,\n} from \"@/types\"\n\nexport class TgdResourceTextureCube extends TgdResource<\n TgdTextureCubeOptions,\n TgdTextureCube\n> {\n constructor(public readonly context: TgdContextInterface) {\n super()\n }\n\n protected actualCreate(input: TgdTextureCubeOptions): TgdTextureCube {\n return new TgdTextureCubeImpl(this.context, input)\n }\n\n protected actualDelete(object: TgdTextureCube): void {\n if (object instanceof TgdTextureCubeImpl) object.delete()\n }\n}\n","export type TgdBufferOptionTarget =\n | \"ARRAY_BUFFER\"\n | \"ELEMENT_ARRAY_BUFFER\"\n | \"COPY_READ_BUFFER\"\n | \"COPY_WRITE_BUFFER\"\n | \"TRANSFORM_FEEDBACK_BUFFER\"\n | \"UNIFORM_BUFFER\"\n | \"PIXEL_PACK_BUFFER\"\n | \"PIXEL_UNPACK_BUFFER\"\n\nexport type TgdBufferOptionUsage =\n | \"STATIC_DRAW\"\n | \"DYNAMIC_DRAW\"\n | \"STREAM_DRAW\"\n | \"STATIC_READ\"\n | \"DYNAMIC_READ\"\n | \"STREAM_READ\"\n | \"STATIC_COPY\"\n | \"DYNAMIC_COPY\"\n | \"STREAM_COPY\"\n\nexport interface TgdBufferOptions {\n target: TgdBufferOptionTarget\n usage: TgdBufferOptionUsage\n}\n\nexport class TgdBuffer {\n public readonly buffer: WebGLBuffer\n\n private _target: TgdBufferOptionTarget\n private _usage: TgdBufferOptionUsage\n\n constructor(\n public readonly gl: WebGL2RenderingContext,\n data?: BufferSource,\n options?: Partial<TgdBufferOptions>\n ) {\n const buffer = gl.createBuffer()\n if (!buffer) throw Error(\"Unable to create WebGLBuffer!\")\n\n this._target = options?.target ?? \"ARRAY_BUFFER\"\n this._usage = options?.usage ?? \"STATIC_DRAW\"\n this.buffer = buffer\n if (data) {\n this.bufferData(data, options)\n }\n }\n\n get target() {\n return this._target\n }\n\n bind(target?: TgdBufferOptionTarget) {\n const { gl, buffer } = this\n this._target = target ?? this._target\n gl.bindBuffer(gl[this._target], buffer)\n }\n\n bufferData(data: BufferSource, options: Partial<TgdBufferOptions> = {}) {\n const { gl } = this\n this.bind(options.target)\n this._usage = options.usage ?? this._usage\n gl.bufferData(gl[this._target], data, gl[this._usage])\n }\n\n delete() {\n const { gl, buffer } = this\n gl.deleteBuffer(buffer)\n }\n}\n","import { TgdBuffer } from \"@/buffer\"\nimport { TgdDataset } from \"@/dataset\"\nimport { TgdProgram } from \"@/types\"\n\nexport class TgdVertexArray {\n public readonly vao: WebGLVertexArrayObject\n\n private readonly drawBuffers: TgdBuffer[] = []\n private readonly elemBuffer: TgdBuffer | null = null\n\n constructor(\n public readonly gl: WebGL2RenderingContext,\n program?: TgdProgram,\n datasets?: TgdDataset<any>[],\n elements?: Uint8Array | Uint16Array | Uint32Array\n ) {\n const vao = gl.createVertexArray()\n if (!vao) throw Error(\"Unable to create VertexArrayObject!\")\n\n this.vao = vao\n if (!program || !datasets) return\n\n gl.bindVertexArray(vao)\n this.drawBuffers = datasets.map(dataset => {\n const buffer = new TgdBuffer(gl, dataset.dataView, {\n target: dataset.target,\n usage: dataset.usage,\n })\n buffer.bind()\n dataset.defineAttributes(gl, program)\n return buffer\n })\n if (elements) {\n const buffer = new TgdBuffer(gl, elements, {\n target: \"ELEMENT_ARRAY_BUFFER\",\n })\n buffer.bind()\n this.elemBuffer = buffer\n }\n gl.bindVertexArray(null)\n }\n\n bind() {\n this.gl.bindVertexArray(this.vao)\n }\n\n unbind() {\n this.gl.bindVertexArray(null)\n }\n\n delete() {\n const { gl, vao, drawBuffers, elemBuffer } = this\n gl.deleteVertexArray(vao)\n drawBuffers.forEach(buff => buff.delete())\n if (elemBuffer) elemBuffer.delete()\n }\n}\n","import { TgdInputKeyboard } from \"@/types/input-keyboard\"\n\nexport class TgdInputKeyboardImpl implements TgdInputKeyboard {\n private readonly keysDown = new Set<string>()\n private readonly keysUp = new Set<string>()\n private attached = false\n\n constructor() {\n document.addEventListener(\"keydown\", this.handleKeyDown)\n document.addEventListener(\"keyup\", this.handleKeyUp)\n this.attached = true\n }\n\n detach() {\n if (!this.attached) return\n\n document.removeEventListener(\"keydown\", this.handleKeyDown)\n document.removeEventListener(\"keyup\", this.handleKeyUp)\n this.attached = false\n }\n\n isDown(...keys: string[]): boolean {\n for (const key of keys) {\n if (!this.keysDown.has(key)) return false\n }\n return true\n }\n\n hasClicked(key: string): boolean {\n if (this.keysUp.has(key)) {\n this.keysUp.delete(key)\n return true\n }\n return false\n }\n\n private readonly handleKeyDown = (evt: KeyboardEvent) => {\n this.keysDown.add(evt.key)\n this.keysUp.delete(evt.key)\n }\n\n private readonly handleKeyUp = (evt: KeyboardEvent) => {\n this.keysDown.delete(evt.key)\n this.keysUp.add(evt.key)\n }\n}\n","import { TgdEvent } from \"@/event\"\nimport { TgdInputPointer, TgdInputPointerEvent } from \"@/types\"\n\nexport class TgdInputPointerImpl implements TgdInputPointer {\n readonly eventMoveStart = new TgdEvent<{ start: TgdInputPointerEvent }>()\n readonly eventMove = new TgdEvent<{\n current: TgdInputPointerEvent\n previous: TgdInputPointerEvent\n start: TgdInputPointerEvent\n }>()\n readonly eventMoveEnd = new TgdEvent<{\n current: TgdInputPointerEvent\n previous: TgdInputPointerEvent\n start: TgdInputPointerEvent\n }>()\n readonly eventZoom = new TgdEvent<{\n current: TgdInputPointerEvent\n direction: number\n preventDefault: () => void\n }>()\n public inertia = 0\n\n private start: TgdInputPointerEvent = { x: 0, y: 0, t: 0, fingersCount: 1 }\n private current: TgdInputPointerEvent = {\n x: 0,\n y: 0,\n t: 0,\n fingersCount: 1,\n }\n private previous: TgdInputPointerEvent = {\n x: 0,\n y: 0,\n t: 0,\n fingersCount: 1,\n }\n private active = false\n private canvasX = 0\n private canvasY = 0\n private screenX = 0\n private screenY = 0\n private inertiaDirX = 0\n private inertiaDirY = 0\n private inertiaStop = true\n private inertiaRunning = false\n private inertiaTimeStamp = 0\n private inertiaLastRefresh = 0\n\n constructor(private readonly canvas: HTMLCanvasElement) {\n canvas.addEventListener(\n \"pointerdown\",\n this.handleCanvasPointerDown,\n true\n )\n canvas.addEventListener(\"wheel\", this.handleCanvasWheel)\n document.addEventListener(\"pointerdown\", this.handlePointerDown)\n document.addEventListener(\"pointermove\", this.handlePointerMove)\n document.addEventListener(\"pointerup\", this.handlePointerUp)\n }\n\n detach() {\n const { canvas } = this\n if (!canvas) return\n\n canvas.removeEventListener(\"pointerdown\", this.handleCanvasPointerDown)\n canvas.removeEventListener(\"wheel\", this.handleCanvasWheel)\n document.removeEventListener(\"pointerdown\", this.handlePointerDown)\n document.removeEventListener(\"pointermove\", this.handlePointerMove)\n document.removeEventListener(\"pointerup\", this.handlePointerUp)\n }\n\n private readonly handleCanvasWheel = (evt: WheelEvent) => {\n let delta = evt.deltaX + evt.deltaY + evt.deltaZ\n if (delta > 0) delta = 1\n else delta = -1\n this.eventZoom.dispatch({\n current: this.getPoint(evt),\n direction: delta,\n preventDefault: () => evt.preventDefault(),\n })\n }\n\n private readonly handleCanvasPointerDown = (evt: PointerEvent) => {\n if (!evt.isPrimary) return\n\n this.canvasX = evt.clientX\n this.canvasY = evt.clientY\n this.active = true\n this.inertiaStop = true\n }\n\n private readonly handlePointerDown = (evt: PointerEvent) => {\n if (!evt.isPrimary || !this.active) return\n\n this.screenX = evt.clientX\n this.screenY = evt.clientY\n const point = this.getPoint(evt)\n this.start = this.current = this.previous = point\n this.eventMoveStart.dispatch({ start: point })\n }\n\n private readonly handlePointerMove = (evt: PointerEvent) => {\n if (!evt.isPrimary || !this.active || !this.canvas) return\n\n this.previous = this.current\n this.current = this.getPoint(evt)\n this.eventMove.dispatch({\n start: this.start,\n current: this.current,\n previous: this.previous,\n })\n }\n\n private readonly handlePointerUp = (evt: PointerEvent) => {\n if (!evt.isPrimary || !this.active) return\n\n this.current = this.getPoint(evt)\n this.eventMoveEnd.dispatch({\n start: this.start,\n current: this.current,\n previous: this.previous,\n })\n this.active = false\n this.inertiaStop = false\n this.inertiaRunning = false\n const dt = this.current.t - this.previous.t\n const w = dt > 0 ? 1 / dt : 0\n this.inertiaDirX = w * (this.current.x - this.previous.x)\n this.inertiaDirY = w * (this.current.y - this.previous.y)\n window.requestAnimationFrame(this.simulateInertia)\n }\n\n private getPoint(evt: PointerEvent | WheelEvent): TgdInputPointerEvent {\n const { left, top, width, height } = this.canvas.getBoundingClientRect()\n const x =\n 2 *\n ((this.canvasX + evt.clientX - this.screenX - left) / width - 0.5)\n const y =\n -2 *\n ((this.canvasY + evt.clientY - this.screenY - top) / height - 0.5)\n return { x, y, t: evt.timeStamp, fingersCount: 1 }\n }\n\n private readonly simulateInertia = (time: number) => {\n if (this.inertia <= 0 || this.inertiaStop) return\n\n if (!this.inertiaRunning) {\n this.inertiaTimeStamp = time\n this.inertiaLastRefresh = time\n this.inertiaRunning = true\n }\n const t = time - this.inertiaTimeStamp\n\n const alpha = 1 - t / this.inertia\n if (alpha <= 0 || alpha > 1) return\n\n const dt = t - this.inertiaLastRefresh\n this.inertiaLastRefresh = t\n const vx = this.inertiaDirX * dt * alpha\n const vy = this.inertiaDirY * dt * alpha\n this.previous = { ...this.current }\n this.current.t = this.previous.t + dt\n this.current.x += vx\n this.current.y += vy\n const { current, previous, start } = this\n this.eventMove.dispatch({\n current,\n previous,\n start,\n })\n window.requestAnimationFrame(this.simulateInertia)\n }\n}\n","import { TgdInputKeyboardImpl } from \"@/input/keyboard\"\nimport { TgdInputPointerImpl } from \"@/input/pointer\"\nimport { TgdInputKeyboard } from \"@/types/input-keyboard\"\nimport { TgdInputPointer } from \"@/types/input-pointer\"\n\nexport class TgdInputs {\n private _keyboard: TgdInputKeyboard | null = null\n private _pointer: TgdInputPointer | null = null\n\n constructor(private readonly canvas: HTMLCanvasElement) {}\n\n get keyboard(): TgdInputKeyboard {\n if (!this._keyboard) {\n this._keyboard = new TgdInputKeyboardImpl()\n }\n return this._keyboard\n }\n\n get pointer(): TgdInputPointer {\n if (!this._pointer) {\n this._pointer = new TgdInputPointerImpl(this.canvas)\n }\n return this._pointer\n }\n}\n","import { TgdCamera, TgdCameraPerspective } from \"@/camera\"\nimport { TgdPainterGroup } from \"../painter/group\"\nimport { TgdPainter } from \"../painter/painter\"\nimport { TgdContextInterface, TgdProgram } from \"@/types\"\nimport {\n TgdResourceProgram,\n TgdResourceTexture2D,\n TgdResourceTextureCube,\n} from \"@/resource\"\nimport { TgdBuffer, TgdBufferOptions } from \"@/buffer\"\nimport { TgdDataset } from \"@/dataset\"\nimport { TgdVertexArray } from \"@/vao\"\nimport { TgdInputs } from \"@/input\"\nimport { TgdPainterFunction as TgdPainterFunctionType } from \"@/types/painter\"\n\n/**\n * You can pass all the attributes of the [WebGLContextAttributes](https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes)\n * object.\n * @see {@link TgdContext}\n */\nexport type TgdContextOptions = WebGLContextAttributes & {\n /**\n * You can override the behaviour for when a resize even occurs,\n * by providing a callback `onResize(...)`.\n *\n * By default, this is what will happen:\n * ```\n * gl.canvas.width = width\n * gl.canvas.height = height\n * gl.viewport(0, 0, width, height)\n * ```\n * @param gl WebGL2 context.\n * @param width New width of the viewport.\n * @param height New height of the viewport.\n */\n onResize?(gl: WebGL2RenderingContext, width: number, height: number): void\n}\n\n/**\n * This class gives you a [WebGL2RenderingContext](https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext) for a given canvas,\n * through its public readonly attribute `gl`.\n *\n * It also acts as a resource manager for most of the WebGL2 reources you need.\n *\n * @example\n * ```\n * import { TgdContext, TgdPainterClear } from \"@tolokoban/tgd\"\n *\n * export function paint(canvas: HTMLCanvasElement) {\n * const ctx = new TgdContext(canvas)\n * const clear = new TgdPainterClear(ctx, { color: [1, 0.667, 0, 1] })\n * ctx.add(clear)\n * ctx.paint()\n * }\n * ```\n */\nexport class TgdContext implements TgdContextInterface {\n public readonly gl: WebGL2RenderingContext\n public readonly inputs: TgdInputs\n public camera: TgdCamera\n /**\n * Resource manager for WebGLProgram.\n */\n public readonly programs: TgdResourceProgram\n public readonly textures2D: TgdResourceTexture2D\n private _texturesCube: TgdResourceTextureCube | null = null\n\n private readonly observer: ResizeObserver\n private readonly painters: TgdPainterGroup\n private isPlaying = false\n private requestAnimationFrame = -1\n private lastTime = -1\n\n /**\n * @param canvas The canvas to which attach a WebGL2 context.\n * @see {@link TgdContextOptions}\n */\n constructor(\n public readonly canvas: HTMLCanvasElement,\n options: TgdContextOptions = {}\n ) {\n const gl = canvas.getContext(\"webgl2\", options)\n if (!gl) throw Error(\"Unable to create a WebGL2 context!\")\n\n this.gl = gl\n this.programs = new TgdResourceProgram(gl)\n this.textures2D = new TgdResourceTexture2D(this)\n const onResize = options.onResize ?? handleResize\n this.observer = new ResizeObserver(() => {\n onResize(gl, canvas.clientWidth, canvas.clientHeight)\n })\n this.observer.observe(canvas)\n this.inputs = new TgdInputs(canvas)\n this.camera = new TgdCameraPerspective()\n this.painters = new TgdPainterGroup()\n // Prevent system gestures.\n canvas.style.touchAction = \"none\"\n }\n\n get texturesCube(): TgdResourceTextureCube {\n if (!this._texturesCube) {\n this._texturesCube = new TgdResourceTextureCube(this)\n }\n return this._texturesCube\n }\n\n get onEnter(): TgdPainterFunctionType | undefined {\n return this.painters.onEnter\n }\n set onEnter(v: TgdPainterFunctionType | undefined) {\n this.painters.onEnter = v\n }\n\n get onExit(): TgdPainterFunctionType | undefined {\n return this.painters.onExit\n }\n set onExit(v: TgdPainterFunctionType | undefined) {\n this.painters.onExit = v\n }\n\n get width() {\n return this.gl.drawingBufferWidth\n }\n\n get height() {\n return this.gl.drawingBufferHeight\n }\n\n /**\n * Is the animation playing?\n */\n get playing() {\n return this.isPlaying\n }\n /**\n * If `playing` is true, the method `paint()` will be called\n * for every animation frame.\n * @see paint()\n */\n set playing(value: boolean) {\n if (value === this.isPlaying) return\n\n if (value) this.paint()\n this.isPlaying = value\n }\n\n /**\n * Start the animation.\n * You can achieve the same result with `context.playing = true`.\n *\n * @see playing\n */\n play() {\n this.playing = true\n }\n\n /**\n * Pause the animation.\n * You can achieve the same result with `context.playing = false`.\n *\n * @see playing\n */\n pause() {\n this.playing = false\n }\n\n /**\n * Check if `painter` already exist in the current list of painters.\n */\n has(painter: TgdPainter): boolean {\n return this.painters.has(painter)\n }\n\n /**\n * Add one or more painters.\n */\n add(...painters: TgdPainter[]) {\n this.painters.add(...painters)\n }\n\n /**\n * Remove one or more painters.\n * */\n remove(...painters: TgdPainter[]) {\n this.painters.remove(...painters)\n }\n\n removeAll() {\n this.painters.removeAll()\n }\n\n createBuffer(\n data?: BufferSource,\n options?: Partial<TgdBufferOptions>\n ): TgdBuffer {\n return new TgdBuffer(this.gl, data, options)\n }\n\n createVAO(\n program?: TgdProgram,\n datasets?: TgdDataset<any>[],\n elements?: Uint8Array | Uint16Array | Uint32Array\n ): TgdVertexArray {\n return new TgdVertexArray(this.gl, program, datasets, elements)\n }\n\n /**\n * Trigger the painters to render the scene.\n */\n readonly paint = () => {\n window.cancelAnimationFrame(this.requestAnimationFrame)\n this.requestAnimationFrame = window.requestAnimationFrame(\n this.actualPaint\n )\n }\n\n private readonly actualPaint = (time: number) => {\n const { lastTime, gl } = this\n if (lastTime < 0) {\n this.lastTime = time\n // First frame, let's skip it to get better timing.\n this.paint()\n return\n }\n\n const delay = time - this.lastTime\n this.lastTime = time\n this.camera.screenWidth = gl.drawingBufferWidth\n this.camera.screenHeight = gl.drawingBufferHeight\n this.painters.paint(time, delay)\n if (this.isPlaying) this.paint()\n }\n\n destroy() {\n window.cancelAnimationFrame(this.requestAnimationFrame)\n this.playing = false\n this.painters.delete()\n this.observer.unobserve(this.canvas)\n }\n}\n\nfunction handleResize(\n gl: WebGL2RenderingContext,\n width: number,\n height: number\n) {\n const canvas = gl.canvas as HTMLCanvasElement\n canvas.width = width\n canvas.height = height\n gl.viewport(0, 0, width, height)\n}\n","import { TgdEvent } from \"@/event\"\nimport { TgdContextInterface, TgdInputPointerEvent } from \"@/types\"\n\nexport interface TgdControllerCameraOrbitOptions {\n speedOrbit: number\n speedZoom: number\n}\n\nexport class TgdControllerCameraOrbit {\n /**\n * The camera will only move if `enabled === true`.\n */\n public enabled = true\n public speedZoom = 1\n public speedOrbit = 1\n public readonly eventZoomChange = new TgdEvent<TgdControllerCameraOrbit>()\n public readonly eventOrbitChange = new TgdEvent<TgdControllerCameraOrbit>()\n\n constructor(\n private readonly context: TgdContextInterface,\n {\n speedZoom = 1,\n speedOrbit = 1,\n }: Partial<TgdControllerCameraOrbitOptions> = {}\n ) {\n const { inputs } = context\n inputs.pointer.eventMove.addListener(this.handleMove)\n inputs.pointer.eventZoom.addListener(this.handleZoom)\n this.speedOrbit = speedOrbit\n this.speedZoom = speedZoom\n }\n\n detach() {\n const { inputs } = this.context\n inputs.pointer.eventMove.removeListener(this.handleMove)\n inputs.pointer.eventZoom.removeListener(this.handleZoom)\n }\n\n private readonly handleMove = (evt: {\n current: TgdInputPointerEvent\n previous: TgdInputPointerEvent\n start: TgdInputPointerEvent\n }) => {\n if (!this.enabled) return\n\n const { context } = this\n const dt = evt.current.t - evt.previous.t\n if (dt <= 0) return\n\n const { keyboard } = context.inputs\n if (keyboard.isDown(\"z\")) {\n const x1 = evt.previous.x\n const y1 = evt.previous.y\n if (Math.abs(x1) + Math.abs(y1) === 0) return\n\n const x2 = evt.current.x\n const y2 = evt.current.y\n if (Math.abs(x2) + Math.abs(y2) === 0) return\n\n const x = x1 * x2 + y1 * y2\n const y = x1 * y2 - y1 * x2\n const ang = Math.atan2(y, x) * this.speedOrbit\n context.camera.orbitAroundZ(-ang)\n this.fireOrbitChange()\n return\n }\n\n const speed = 3 * (keyboard.isDown(\"Shift\") ? 0.1 : 1) * this.speedOrbit\n const dx = (evt.current.x - evt.previous.x) * speed\n const dy = (evt.current.y - evt.previous.y) * speed\n if (!keyboard.isDown(\"x\")) context.camera.orbitAroundY(-dx)\n if (!keyboard.isDown(\"y\")) context.camera.orbitAroundX(dy)\n this.fireOrbitChange()\n }\n\n private fireOrbitChange() {\n this.eventOrbitChange.dispatch(this)\n this.context.paint()\n }\n\n private readonly handleZoom = (evt: {\n current: TgdInputPointerEvent\n direction: number\n preventDefault: () => void\n }) => {\n if (!this.enabled) return\n\n const { camera } = this.context\n let speed = 5e-2 * this.speedZoom\n if (this.context.inputs.keyboard.isDown(\"Shift\")) speed *= 0.1\n const dz = -evt.direction * speed\n camera.zoom = Math.max(1e-5, camera.zoom + dz)\n evt.preventDefault()\n this.fireZoomChange()\n }\n\n private fireZoomChange() {\n this.eventZoomChange.dispatch(this)\n this.context.paint()\n }\n}\n","import { TgdProgram } from \"@/types\"\nimport {\n TgdBufferOptionTarget,\n TgdBufferOptionUsage,\n TgdBufferOptions,\n} from \"@/buffer\"\n\nexport type TgdDatasetType = \"float\" | \"vec2\" | \"vec3\" | \"vec4\"\n\nexport interface TgdDatasetOptions {\n divisor: number\n target: TgdBufferOptionTarget\n usage: TgdBufferOptionUsage\n}\n\nexport class TgdDataset<T extends Record<string, TgdDatasetType>> {\n private readonly stride: number\n private readonly dataPerAttribute: Record<keyof T, ArrayBuffer>\n private readonly definitions: Record<\n keyof T,\n AttributeInternalRepresentation\n >\n private data: DataView | null = null\n\n public count = 0\n public target: TgdBufferOptionTarget\n public usage: TgdBufferOptionUsage\n\n constructor(\n attributesDefinition: T,\n options: Partial<TgdDatasetOptions> = {}\n ) {\n this.target = options.target ?? \"ARRAY_BUFFER\"\n this.usage = options.usage ?? \"STATIC_DRAW\"\n const divisor = options.divisor ?? 0\n let stride = 0\n const data: { [key: string]: ArrayBuffer } = {}\n const definitions: Record<string, AttributeInternalRepresentation> = {}\n for (const key of Object.keys(attributesDefinition)) {\n const name = key as keyof T\n data[key] = new ArrayBuffer(0)\n const def: AttributeInternalRepresentation = {\n dimension: DIMS[attributesDefinition[name]],\n bytesOffset: stride,\n bytesPerElement: Float32Array.BYTES_PER_ELEMENT,\n divisor,\n getter(view: DataView, byteOffset: number) {\n if (byteOffset >= view.byteLength) {\n byteOffset %= view.byteLength\n }\n return view.getFloat32(byteOffset)\n },\n setter(view: DataView, byteOffset: number, value: number) {\n view.setFloat32(byteOffset, value)\n },\n }\n definitions[key] = def\n stride += def.bytesPerElement * def.dimension\n }\n this.dataPerAttribute = data as Record<keyof T, ArrayBuffer>\n this.definitions = definitions as Record<\n keyof T,\n AttributeInternalRepresentation\n >\n this.stride = stride\n }\n\n set(attribName: keyof T, value: ArrayBuffer) {\n if (isObject(value) && value.buffer instanceof ArrayBuffer) {\n value = value.buffer\n }\n if (this.dataPerAttribute[attribName] === value) return\n\n this.dataPerAttribute[attribName] = value\n const { bytesPerElement, dimension } = this.definitions[attribName]\n this.count = Math.max(\n this.count,\n Math.ceil(value.byteLength / (bytesPerElement * dimension))\n )\n this.data = null\n }\n\n get(attribName: keyof T): ArrayBuffer {\n return this.dataPerAttribute[attribName] ?? new ArrayBuffer(0)\n }\n\n get dataView(): DataView {\n if (!this.data) {\n const data = new ArrayBuffer(this.stride * this.count)\n const viewDestination = new DataView(data)\n let offsetDestination = 0\n const { dataPerAttribute, definitions } = this\n for (let vertex = 0; vertex < this.count; vertex++) {\n for (const key of Object.keys(definitions)) {\n const def = definitions[key]\n const buff: ArrayBufferLike = dataPerAttribute[key]\n const viewSource = new DataView(buff)\n let offsetSource =\n def.bytesPerElement * def.dimension * vertex\n for (let dim = 0; dim < def.dimension; dim++) {\n def.setter(\n viewDestination,\n offsetDestination,\n def.getter(viewSource, offsetSource)\n )\n offsetSource += def.bytesPerElement\n offsetDestination += def.bytesPerElement\n }\n }\n }\n this.data = new DataView(data)\n }\n return this.data\n }\n\n /**\n * Enable the vertex attrib array, and set\n * the vertex attrib pointer for every declared\n * attribute.\n */\n defineAttributes(gl: WebGL2RenderingContext, prg: TgdProgram) {\n let offsetDestination = 0\n const { definitions } = this\n for (const name of Object.keys(definitions)) {\n const def = definitions[name]\n const att = prg.getAttribLocation(name)\n gl.enableVertexAttribArray(att)\n gl.vertexAttribPointer(\n att,\n def.dimension,\n gl.FLOAT,\n false,\n this.stride,\n offsetDestination\n )\n gl.vertexAttribDivisor(att, def.divisor)\n const bytes = def.dimension * def.bytesPerElement\n offsetDestination += bytes\n }\n }\n}\n\nfunction isObject(data: unknown): data is Record<string, unknown> {\n if (!data) return false\n return typeof data === \"object\"\n}\n\nconst DIMS: Record<TgdDatasetType, number> = {\n float: 1,\n vec2: 2,\n vec3: 3,\n vec4: 4,\n}\n\ninterface AttributeInternalRepresentation {\n dimension: number\n bytesPerElement: number\n bytesOffset: number\n divisor: number\n getter(this: void, view: DataView, byteOffset: number): number\n setter(this: void, view: DataView, byteOffset: number, value: number): void\n}\n","import { TgdContext } from \"@/context\"\nimport { TgdProgram } from \"@/types\"\nimport { TgdPainter } from \"@/painter/painter\"\nimport { TgdDataset } from \"@/dataset\"\nimport { TgdVertexArray } from \"@/vao\"\nimport { TgdVec4 } from \"@/math\"\n\nimport VERT from \"./axis.vert\"\nimport FRAG from \"./axis.frag\"\n\nexport type TgdPainterAxisOptions = {\n x: number\n y: number\n z: number\n scale: number\n}\n\nexport class TgdPainterAxis extends TgdPainter {\n private readonly vao: TgdVertexArray\n private readonly prg: TgdProgram\n private readonly translateAndScale: TgdVec4\n\n constructor(\n public readonly context: TgdContext,\n { x = 0, y = 0, z = 0, scale = 1 }: Partial<TgdPainterAxisOptions> = {}\n ) {\n super()\n const prg = context.programs.create({\n vert: VERT,\n frag: FRAG,\n })\n this.prg = prg\n const dataset = new TgdDataset({\n attPos: \"vec3\",\n attColor: \"vec4\",\n })\n // prettier-ignore\n dataset.set(\"attPos\", new Float32Array([\n 0, 0, 0, +1, +0, +0,\n 0, 0, 0, +0, +1, +0,\n 0, 0, 0, +0, +0, +1,\n 0, 0, 0, -1, -0, -0,\n 0, 0, 0, -0, -1, -0,\n 0, 0, 0, -0, -0, -1,\n ]))\n const a = 1\n const b = 0.25\n // prettier-ignore\n dataset.set(\"attColor\", new Float32Array([\n a, 0, 0, 1, a, 0, 0, 1,\n 0, a, 0, 1, 0, a, 0, 1,\n 0, 0, a, 1, 0, 0, a, 1,\n b, 0, 0, 1, b, 0, 0, 1,\n 0, b, 0, 1, 0, b, 0, 1,\n 0, 0, b, 1, 0, 0, b, 1,\n ]))\n this.vao = context.createVAO(prg, [dataset])\n this.translateAndScale = new TgdVec4(x, y, z, scale)\n }\n\n get x(): number {\n return this.translateAndScale.x\n }\n set x(v: number) {\n this.translateAndScale.x = v\n }\n\n get y(): number {\n return this.translateAndScale.y\n }\n set y(v: number) {\n this.translateAndScale.y = v\n }\n\n get z(): number {\n return this.translateAndScale.z\n }\n set z(v: number) {\n this.translateAndScale.z = v\n }\n\n get scale(): number {\n return this.translateAndScale.w\n }\n set scale(v: number) {\n this.translateAndScale.w = v\n }\n\n delete(): void {\n this.vao.delete()\n }\n\n paint(time: number, delay: number): void {\n const { context, prg, vao, translateAndScale } = this\n const { gl, camera } = context\n prg.use()\n prg.uniform4fv(\"uniTS\", translateAndScale)\n prg.uniformMatrix4fv(\"uniModelViewMatrix\", camera.matrixViewModel)\n prg.uniformMatrix4fv(\"uniProjectionMatrix\", camera.matrixProjection)\n vao.bind()\n gl.drawArrays(gl.LINES, 0, 12)\n }\n}\n","import { TgdProgram, TgdTexture2D } from \"@/types\"\nimport { TgdContext } from \"@/context\"\nimport { TgdPainter } from \"@/painter/painter\"\nimport { TgdDataset } from \"@/dataset/dataset\"\nimport { TgdVertexArray } from \"@/vao\"\n\nimport VERT from \"./background.vert\"\nimport FRAG from \"./background.frag\"\n\nexport interface TgdPainterBackgroundOptions {\n zoom: number\n x: number\n y: number\n z: number\n}\n\nexport class TgdPainterBackground extends TgdPainter {\n public texture: TgdTexture2D\n\n private readonly program: TgdProgram\n private readonly vao: TgdVertexArray\n\n /**\n * With a zoom of **1**, the image will have the smaller size to cover\n * the whole scene.\n */\n public zoom = 1\n public x = 0\n public y = 0\n public z = 1\n\n constructor(\n private readonly context: TgdContext,\n texture: TgdTexture2D,\n {\n x = 0,\n y = 0,\n z = 1,\n zoom = 1,\n }: Partial<TgdPainterBackgroundOptions> = {}\n ) {\n super()\n this.x = x\n this.y = y\n this.z = z\n this.zoom = zoom\n this.texture = texture\n this.program = context.programs.create({\n vert: VERT,\n frag: FRAG,\n })\n const dataset = new TgdDataset({\n attPoint: \"vec2\",\n attUV: \"vec2\",\n })\n dataset.set(\n \"attPoint\",\n new Float32Array([-1, +1, +1, +1, -1, -1, +1, -1])\n )\n dataset.set(\"attUV\", new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]))\n this.vao = context.createVAO(this.program, [dataset])\n }\n\n delete(): void {\n const { vao } = this\n vao.delete\n }\n\n paint(time: number, delay: number): void {\n const { gl } = this.context\n const { vao, program, texture, zoom, x, y, z } = this\n program.use()\n const { width, height } = this.context\n const horizontal = texture.width * height > texture.height * width\n const scaleX = horizontal\n ? (texture.width * height) / (width * texture.height)\n : 1\n const scaleY = horizontal\n ? 1\n : (texture.height * width) / (height * texture.width)\n program.uniform2f(\"uniScale\", scaleX, scaleY)\n program.uniform2f(\"uniScroll\", x, y)\n program.uniform1f(\"uniZoom\", 1 / zoom)\n program.uniform1f(\"uniZ\", z)\n texture.activate(program, \"uniTexture\")\n vao.bind()\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4)\n }\n}\n","import { TgdPainter } from \".\"\nimport { TgdContext } from \"@/context\"\nimport { TgdContextInterface, TgdVec4 } from \"..\"\n\nexport interface TgdPainterClearOptions {\n color: [red: number, green: number, blue: number, alpha: number] | TgdVec4\n depth: number\n}\n\n/**\n * @see {@link TgdPainterClearOptions}\n */\nexport class TgdPainterClear implements TgdPainter {\n private clearMask = 0\n\n public red = 1\n public green = 0.7\n public blue = 0\n public alpha = 1\n public depth = 1\n\n constructor(\n public readonly context: TgdContextInterface,\n options: Partial<TgdPainterClearOptions> = {}\n ) {\n const { gl } = context\n const color = options.color ?? [0, 0, 0, 1]\n const depth = options.depth ?? 1\n this.clearMask = 0\n let hasAnyOption = false\n if (options.color) {\n this.clearMask |= gl.COLOR_BUFFER_BIT\n hasAnyOption = true\n }\n if (typeof options.depth === \"number\") {\n this.clearMask |= gl.DEPTH_BUFFER_BIT\n hasAnyOption = true\n }\n if (!hasAnyOption) {\n throw Error(\n \"[TgdPainterClear] You must give at least a color or a depth in the constructor!\"\n )\n }\n ;[this.red, this.green, this.blue, this.alpha] = color\n this.depth = depth\n }\n\n /** Nothing to destroy. */\n delete(): void {}\n\n paint(_time: number, _delay: number): void {\n const { clearMask, context, red, green, blue, alpha, depth } = this\n const { gl } = context\n gl.clearColor(red, green, blue, alpha)\n gl.clearDepth(depth)\n gl.clear(clearMask)\n }\n\n update(_time: number, _delay: number): void {}\n}\n","import { TgdContext } from \"@/context\"\nimport { TgdContextInterface, WebglDepthFunc } from \"..\"\nimport { TgdPainter } from \"./painter\"\n\nexport type TgdPainterDepthOptions = {\n enabled: boolean\n func: WebglDepthFunc\n mask: boolean\n rangeMin: number\n rangeMax: number\n}\n\nexport class TgdPainterDepth extends TgdPainter {\n public enabled: boolean\n public func: WebglDepthFunc\n public mask: boolean\n public rangeMin: number\n public rangeMax: number\n\n constructor(\n private readonly context: TgdContextInterface,\n {\n enabled = true,\n func = \"LESS\",\n mask = true,\n rangeMin = 0,\n rangeMax = 1,\n }: Partial<TgdPainterDepthOptions> = {}\n ) {\n super()\n this.enabled = enabled\n this.func = func\n this.mask = mask\n this.rangeMin = rangeMin\n this.rangeMax = rangeMax\n }\n\n delete(): void {}\n\n paint(): void {\n const { gl } = this.context\n const { enabled } = this\n if (!enabled) {\n gl.disable(gl.DEPTH_TEST)\n return\n }\n\n const { func, mask, rangeMin, rangeMax } = this\n gl.enable(gl.DEPTH_TEST)\n gl.depthFunc(gl[func])\n gl.depthMask(mask)\n gl.depthRange(rangeMin, rangeMax)\n }\n\n update(): void {}\n}\n","import { TgdPainter } from \"./painter\"\n\n/**\n * This painter paints nothing but execute some logic at every frame.\n */\nexport class TgdPainterLogic extends TgdPainter {\n constructor(\n private readonly logicFunction: (time: number, delay: number) => void\n ) {\n super()\n }\n\n delete(): void {}\n\n paint(time: number, delay: number): void {\n this.logicFunction(time, delay)\n }\n}\n","import { TgdTexture2D, TgdContextInterface, TgdProgram } from \"@/types\"\nimport { TgdPainter } from \"@/painter/painter\"\nimport { TgdVertexArray } from \"@/vao\"\nimport { TgdDataset } from \"@/dataset\"\n\nimport VERT from \"./segments.vert\"\nimport FRAG from \"./segments.frag\"\nimport { TgdVec4 } from \"@/math\"\nimport { TgdCameraOrthographic } from \"@/camera\"\n\nexport type TgdPainterSegmentsOptions = {\n /**\n * How round the tip will be?\n * - **0** means that the tip is flat.\n * - **1** will gives you a triangled tip.\n * - **>1** starts to have a semi-circle shape.\n *\n * **0** is the fastest to render, but you will have\n * a bad connection at joints between segments.\n *\n * Default to **3**.\n */\n roundness: number\n /**\n * With orthographic camera, this is a value in pixels.\n */\n minRadius: number\n}\n\n/**\n * @example\n * ```\n * const factory = new TgdPainterSegmentsData()\n * factory.add(\n * [0, 0, 0, .2],\n * [1, 0, 0, .1],\n * )\n * factory.add(\n * [0, 0, 0, .2],\n * [0, 1, 0, .1],\n * )\n * factory.add(\n * [0, 0, 0, .2],\n * [0, 0, 1, .1],\n * )\n * const segments = new TgdPainterSegments(\n * segment, factory\n * )\n * ```\n */\nexport class TgdPainterSegments extends TgdPainter {\n public colorTexture: TgdTexture2D\n public minRadius: number = 0\n public radiusMultiplier = 1\n public light = 1\n public shiftZ = 0\n\n private readonly vao: TgdVertexArray\n private readonly prg: TgdProgram\n private readonly vertexCount: number\n private readonly instanceCount: number\n\n constructor(\n protected readonly context: TgdContextInterface,\n factory: { makeDataset: () => InstanceDataset; readonly count: number },\n {\n roundness = 3,\n minRadius = 0,\n }: Partial<TgdPainterSegmentsOptions> = {}\n ) {\n super()\n this.minRadius = minRadius\n if (roundness > 125) {\n throw Error(\"[TgdPainterSegments] Max roundness is 125!\")\n }\n if (roundness < 0) {\n throw Error(\"[TgdPainterSegments] Min roundness is 0!\")\n }\n const tex = context.textures2D.create({\n magFilter: \"NEAREST\",\n minFilter: \"NEAREST\",\n wrapR: \"CLAMP_TO_EDGE\",\n wrapS: \"CLAMP_TO_EDGE\",\n wrapT: \"CLAMP_TO_EDGE\",\n })\n tex.makePalette([\"#f00\", \"#0f0\", \"#00f\"])\n this.colorTexture = tex\n const prg = context.programs.create({\n vert: VERT,\n frag: FRAG,\n })\n this.prg = prg\n const { capsule, elements } = makeCapsule(roundness)\n const instance = factory.makeDataset()\n this.vao = context.createVAO(prg, [capsule, instance], elements)\n this.vertexCount = elements.length\n this.instanceCount = instance.count\n }\n\n delete(): void {\n throw new Error(\"Method not implemented.\")\n }\n\n paint(time: number, delay: number): void {\n const {\n context,\n prg,\n vao,\n colorTexture,\n vertexCount,\n instanceCount,\n light,\n radiusMultiplier,\n shiftZ,\n } = this\n const { gl, camera } = context\n prg.use()\n let minRadius = this.minRadius\n if (camera instanceof TgdCameraOrthographic) {\n minRadius *= camera.spaceHeight / camera.screenHeight\n }\n prg.uniform1f(\"uniMinRadius\", minRadius)\n prg.uniform1f(\"uniLight\", light)\n prg.uniform1f(\"uniShiftZ\", shiftZ)\n prg.uniform1f(\"uniRadiusMultiplier\", radiusMultiplier)\n colorTexture.activate(prg, \"uniTexture\")\n prg.uniform1f(\"uniCameraZoom\", camera.zoom)\n prg.uniformMatrix4fv(\"uniModelViewMatrix\", camera.matrixViewModel)\n prg.uniformMatrix4fv(\"uniProjectionMatrix\", camera.matrixProjection)\n vao.bind()\n gl.drawElementsInstanced(\n gl.TRIANGLES,\n vertexCount,\n gl.UNSIGNED_BYTE,\n 0,\n instanceCount\n )\n }\n}\n\ntype Array4 = [x: number, y: number, z: number, r: number] | TgdVec4\ntype Array2 = [u: number, v: number]\n\ntype InstanceDataset = TgdDataset<{\n attAxyzr: \"vec4\"\n attAuv: \"vec2\"\n attBxyzr: \"vec4\"\n attBuv: \"vec2\"\n}>\n\nexport class TgdPainterSegmentsData {\n private _count = 0\n private attAxyzr: number[] = []\n private attAuv: number[] = []\n private attBxyzr: number[] = []\n private attBuv: number[] = []\n\n get count() {\n return this._count\n }\n\n /**\n * @param param0 Point A: coords and radius.\n * @param param2 Point B: coords and radius.\n */\n add(\n [xA, yA, zA, radiusA]: Array4,\n [uA, vA]: Array2,\n [xB, yB, zB, radiusB]: Array4,\n [uB, vB]: Array2\n ) {\n this.attAxyzr.push(xA, yA, zA, radiusA)\n this.attAuv.push(uA, vA)\n this.attBxyzr.push(xB, yB, zB, radiusB)\n this.attBuv.push(uB, vB)\n this._count++\n }\n\n makeDataset(): InstanceDataset {\n const dataset = new TgdDataset(\n {\n attAxyzr: \"vec4\",\n attAuv: \"vec2\",\n attBxyzr: \"vec4\",\n attBuv: \"vec2\",\n },\n {\n divisor: 1,\n }\n )\n dataset.set(\"attAxyzr\", new Float32Array(this.attAxyzr))\n dataset.set(\"attAuv\", new Float32Array(this.attAuv))\n dataset.set(\"attBxyzr\", new Float32Array(this.attBxyzr))\n dataset.set(\"attBuv\", new Float32Array(this.attBuv))\n return dataset\n }\n}\n\ntype CapsuleDataset = TgdDataset<{\n attOffset: \"vec3\"\n}>\n\n/**\n * The capsule is a 2D shape (x,y) that will be uses\n * as a pattern for the segment.\n * The segment will expand this template along Y axis.\n * The tip pointing toward +Y is called A.\n * The tip pointing toward -Y is called B.\n * The z coodinates indicates to which tip the point\n * is attached: 0 for A and 1 for B.\n */\nfunction makeCapsule(roundness: number): {\n capsule: CapsuleDataset\n elements: Uint8Array\n} {\n // prettier-ignore\n const offset: number[] =[\n 0, 0, 0,\n 1, 0, 0,\n -1, 0, 0,\n 0, 0, 1,\n 1, 0, 1,\n -1, 0, 1,\n ]\n // prettier-ignore\n const elements: number[] = [\n 0, 3, 1,\n 3, 4, 1,\n 0, 2, 5,\n 3, 0, 5,\n ]\n if (roundness > 0) {\n const L = (prefix: string, e0: number, e1: number, e2: number) => {\n const i0 = elements[e0] * 3\n const i1 = elements[e1] * 3\n const i2 = elements[e2] * 3\n console.log(\n prefix,\n `(${offset[i0]}, ${offset[i0 + 1]}, ${offset[i0 + 2]}) (${\n offset[i1]\n }, ${offset[i1 + 1]}, ${offset[i1 + 2]}) (${offset[i2]}, ${\n offset[i2 + 1]\n }, ${offset[i2 + 2]})`\n )\n }\n let oldIndexA = 1\n let oldIndexB = 4\n let elemIndex = 6\n for (let i = 0; i < roundness; i++) {\n const ang = (Math.PI * (i + 1)) / (roundness + 1)\n const x = Math.cos(ang)\n const y = Math.sin(ang)\n // We set z to 0 because it's related to tip A.\n offset.push(x, y, 0)\n L(\"A\", 0, oldIndexA, elemIndex)\n elements.push(0, oldIndexA, elemIndex)\n oldIndexA = elemIndex\n elemIndex++\n // We set z to 1 because it's related to tip B.\n offset.push(x, -y, 1)\n L(\"B\", 3, elemIndex, oldIndexB)\n elements.push(3, elemIndex, oldIndexB)\n oldIndexB = elemIndex\n elemIndex++\n }\n elements.push(0, oldIndexA, 2)\n elements.push(3, 5, oldIndexB)\n }\n const capsule: CapsuleDataset = new TgdDataset({\n attOffset: \"vec3\",\n })\n capsule.set(\"attOffset\", new Float32Array(offset))\n return {\n capsule,\n elements: new Uint8Array(elements),\n }\n}\n","import { TgdProgram, TgdTextureCube, TgdTextureCubeOptions } from \"@/types\"\nimport { TgdContext } from \"@/context\"\nimport { TgdPainter } from \"@/painter/painter\"\nimport { TgdDataset } from \"@/dataset/dataset\"\nimport { TgdVertexArray } from \"@/vao\"\nimport { TgdCameraPerspective } from \"@/camera\"\nimport { TgdMat4 } from \"@/math\"\n\nimport VERT from \"./skybox.vert\"\nimport FRAG from \"./skybox.frag\"\n\nexport type TgdPainterSkyboxOptions = TgdTextureCubeOptions & {\n camera?: TgdCameraPerspective\n}\n\nexport class TgdPainterSkybox extends TgdPainter {\n private camera: TgdCameraPerspective\n\n private readonly texture: TgdTextureCube\n private readonly program: TgdProgram\n private readonly vao: TgdVertexArray\n private readonly matrix = new TgdMat4()\n private readonly tmpMat = new TgdMat4()\n\n constructor(\n private readonly context: TgdContext,\n options: TgdPainterSkyboxOptions\n ) {\n super()\n this.camera = options.camera ?? new TgdCameraPerspective()\n this.texture = context.texturesCube.create(options)\n this.program = context.programs.create({\n vert: VERT,\n frag: FRAG,\n })\n const dataset = new TgdDataset({\n attPoint: \"vec2\",\n })\n dataset.set(\n \"attPoint\",\n new Float32Array([-1, +1, +1, +1, -1, -1, +1, -1])\n )\n this.vao = context.createVAO(this.program, [dataset])\n }\n\n delete(): void {\n const { vao } = this\n vao.delete\n }\n\n paint(time: number, delay: number): void {\n const { context, vao, program, texture } = this\n const { gl } = context\n\n program.use()\n program.uniformMatrix4fv(\"uniMatrix\", this.matrix)\n texture.activate(program, \"uniTexture\")\n vao.bind()\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4)\n\n // Compute matrix for the next frame.\n const { camera, matrix, tmpMat } = this\n if (camera !== context.camera) {\n camera.copyOrientationFrom(context.camera)\n }\n matrix.from(camera.matrixProjection)\n tmpMat.fromMat3(camera.matrixViewModel)\n tmpMat.m30 = 0\n tmpMat.m31 = 0\n tmpMat.m32 = 0\n tmpMat.m33 = 1\n tmpMat.m03 = 0\n tmpMat.m13 = 0\n tmpMat.m23 = 0\n matrix.multiply(tmpMat).invert()\n }\n}\n","import { forEachLine } from \"../for-each-line\"\n\n/**\n * This [Wavefront](https://en.wikipedia.org/wiki/Wavefront_.obj_file)\n * parser only finds the object name,\n * the vertices coords, the normals and the UVs.\n *\n * - There can be only one object per file.\n * - Normals and UVs are optional.\n * - All faces **must** be triangles.\n *\n * To export an obj file from blender, please use the following options:\n *\n * - Forward axis: **Y**\n * - Up axis: **Z**\n * - Object / Apply Modifiers: **True**\n * - Geometry / UV Coordinates: **True**\n * - Geometry / Normals: **True**\n * - Geometry / Triangulated Mesh: **True**\n */\nexport class TgdParserMeshWavefront {\n private name = \"Mesh\"\n private attPosition: number[] = []\n private attNormal: number[] = []\n private attUV: number[] = []\n private elements: number[] = []\n\n private elementIndex = 0\n private vertices: number[][] = []\n private normals: number[][] = []\n private uvs: number[][] = []\n private readonly map = new Map<string, number>()\n\n parse(content: string): {\n name: string\n count: number\n type: \"UNSIGNED_BYTE\" | \"UNSIGNED_SHORT\" | \"UNSIGNED_INT\"\n elements: Uint8Array | Uint16Array | Uint32Array\n attPosition: Float32Array\n attNormal?: Float32Array\n attUV?: Float32Array\n } {\n this.reset()\n const {\n onVertex,\n onNormal,\n onTexture,\n onFace,\n onObject,\n name,\n elements,\n } = this\n parse(content, { onVertex, onNormal, onTexture, onFace, onObject })\n const result: {\n name: string\n count: number\n attPosition: Float32Array\n attNormal?: Float32Array\n attUV?: Float32Array\n } = {\n name,\n count: Math.floor(elements.length / 3),\n attPosition: new Float32Array(this.attPosition),\n }\n if (this.attNormal.length > 0) {\n result.attNormal = new Float32Array(this.attNormal)\n }\n if (this.attUV.length > 0) {\n result.attUV = new Float32Array(this.attUV)\n }\n console.log(\"🚀 [wavefront] this.attUV = \", this.attUV) // @FIXME: Remove this line written on 2024-02-02 at 15:13\n const { elementIndex } = this\n if (elementIndex <= 256) {\n console.log(\"UNSIGNED_BYTE\")\n return {\n ...result,\n type: \"UNSIGNED_BYTE\",\n elements: new Uint8Array(elements),\n }\n }\n if (elementIndex <= 0x10000) {\n console.log(\"UNSIGNED_SHORT\")\n return {\n ...result,\n type: \"UNSIGNED_SHORT\",\n elements: new Uint16Array(elements),\n }\n }\n console.log(\"UNSIGNED_INT\")\n return {\n ...result,\n type: \"UNSIGNED_INT\",\n elements: new Uint32Array(elements),\n }\n }\n\n private reset() {\n this.name = \"Mesh\"\n this.attPosition = []\n this.attNormal = []\n this.attUV = []\n this.elements = []\n this.elementIndex = 0\n this.vertices = []\n this.normals = []\n this.uvs = []\n this.map.clear()\n }\n\n private readonly onObject = (name: string) => {\n this.name = name\n }\n\n private readonly onVertex = (x: number, y: number, z: number) => {\n this.vertices.push([x, y, z])\n }\n\n private readonly onNormal = (x: number, y: number, z: number) => {\n this.normals.push([x, y, z])\n }\n\n private readonly onTexture = (u: number, v: number) => {\n this.uvs.push([u, v])\n }\n\n private readonly onFace = (vertices: V[]) => {\n if (vertices.length !== 3)\n throw Error(\"We can only deal with triangles!\")\n\n vertices.forEach(v => this.elements.push(this.getElem(v)))\n }\n\n private getElem(v: V) {\n const k = this.key(v)\n const index = this.map.get(k) ?? -1\n if (index > -1) return index\n\n const [vx, vy, vz] = this.vertices[v.vertex]\n this.attPosition.push(vx, vy, vz)\n if (typeof v.normal === \"number\") {\n const [nx, ny, nz] = this.normals[v.normal]\n this.attNormal.push(nx, ny, nz)\n }\n if (typeof v.uv === \"number\") {\n const [tx, ty] = this.uvs[v.uv]\n this.attUV.push(tx, ty)\n }\n this.map.set(k, this.elementIndex)\n return this.elementIndex++\n }\n\n private key(v: V) {\n return `${v.vertex}/${v.normal}`\n }\n}\n\ninterface TgdParserMeshWavefrontOptions {\n onVertex(x: number, y: number, z: number): void\n onNormal(x: number, y: number, z: number): void\n onTexture(u: number, v?: number, w?: number): void\n onFace(\n faces: Array<{\n vertex: number\n normal?: number\n uv?: number\n }>\n ): void\n onObject(name: string): void\n onGroup(name: string): void\n}\n\ninterface V {\n vertex: number\n normal?: number\n uv?: number\n}\n\nfunction parse(\n content: string,\n options: Partial<TgdParserMeshWavefrontOptions> = {}\n): void {\n const { onVertex, onNormal, onTexture, onFace, onObject } = options\n for (const fullLine of forEachLine(content)) {\n const line = fullLine.trimStart()\n if (onVertex && line.startsWith(\"v \")) {\n const vertex = line\n .substring(\"v \".length)\n .split(\" \")\n .map(v => Number(v))\n if (isVector3(vertex)) onVertex(...vertex)\n } else if (onFace && line.startsWith(\"f \")) {\n onFace(\n line\n .substring(\"f \".length)\n .split(\" \")\n // Warning! We need to remove 1 to the index.\n .map(face => {\n const [v, t, n] = face.split(\"/\")\n return {\n vertex: Number(v) - 1,\n normal: n ? Number(n) - 1 : undefined,\n uv: t ? Number(t) - 1 : undefined,\n }\n })\n )\n } else if (onNormal && line.startsWith(\"vn \")) {\n const normal = line\n .substring(\"vn \".length)\n .split(\" \")\n .map(n => Number(n))\n if (isVector3(normal)) onNormal(...normal)\n } else if (onTexture && line.startsWith(\"vt \")) {\n const [u, v, w] = line\n .substring(\"vt \".length)\n .split(\" \")\n .map(n => Number(n))\n onTexture(u, v, w)\n } else if (onObject && line.startsWith(\"o \")) {\n const name = line.substring(\"o \".length)\n onObject(name)\n }\n }\n}\n\nfunction isVector3(data: number[]): data is [number, number, number] {\n return data.length === 3\n}\n","/**\n * Generator to iterate on each lines of a big string content.\n */\nexport const forEachLine = function* (content: string) {\n const len = content.length\n let index = 0\n let cursor = 0\n while (index > -1 && index < len) {\n index = content.indexOf(\"\\n\", cursor)\n if (index < 0) break\n\n yield content.substring(cursor, index).trim()\n cursor = index + 1\n }\n return content.substring(cursor).trim()\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","padColOfNumbers","values","decimals","p","Math","pow","out","max","val","txt","round","toFixed","length","push","map","padStart","TgdVec3","Float32Array","constructor","x","y","z","super","this","clone","isEqual","isClose","epsilon","abs","rotateAround","axis","angleInRadians","C","cos","S","sin","Vx","Vy","Vz","Kx","Ky","Kz","crossX","crossY","crossZ","a","applyMatrix","mat","m00","m10","m20","m01","m11","m21","m02","m12","m22","from","value","add","vectors","vec","addWithScale","scale","subtract","factor","dot","size","sqrt","normalize","squareLength","cross","x2","y2","z2","x1","y1","z1","random","debug","caption","n","console","log","join","TgdMat4","m03","m13","m23","m30","m31","m32","m33","multiply","mat4","a00","a01","a02","a03","a10","a11","a12","a13","a20","a21","a22","a23","a30","a31","a32","a33","b00","b01","b02","b03","b10","b11","b12","b13","b20","b21","b22","b23","b30","b31","b32","b33","invert","b04","b05","b06","b07","b08","b09","det","invDet","translation","fromMat3","toAxis","axisX","axisY","axisZ","toAxisX","toAxisY","toAxisZ","fromQuat","w","xx","yx","yy","zx","zy","zz","wx","wy","wz","v","c0","c1","c2","c3","TgdVec4","reset","TgdQuat","quat","qx","qy","qz","qw","rx","ry","rz","rw","fromAxis","X","Y","Z","fTrace","fRoot","halfRoot","i","j","k","rotateAroundX","rad","ax","ay","az","aw","bx","bw","rotateAroundY","by","rotateAroundZ","bz","face","FACES","A","H","TgdMat3","transpose","tmp","TgdCamera","dirtyProjection","_screenWidth","_screenHeight","_screenAspectRatio","dirty","dirtyAxis","_matrixViewModel","orientation","target","_distance","_zoom","tmpMat3","tmpVec3","screenAspectRatio","screenWidth","screenHeight","camera","distance","zoom","copyProjectionFrom","copyOrientationFrom","setOrientation","updateAxisIfNeeded","matrixViewModel","updateIfNeeded","setTarget","moveTarget","orbitAroundX","orbitAroundY","orbitAroundZ","updateAxis","Error","d","tx","ty","tz","TgdCameraOrthographic","_matrixProjection","_spaceHeight","_near","_far","spaceHeight","near","far","matrixProjection","updateProjectionIfNeeded","top","bottom","right","left","lr","bt","nf","TgdCameraPerspective","_fovy","PI","Infinity","fovy","aspect","f","tan","TgdPainter","TgdPainterGroup","painters","onEnter","onExit","active","has","painter","includes","remove","index","indexOf","splice","delete","removeAll","paint","time","delay","counter","TgdResource","keys","Map","objects","references","create","input","id","makeKeyFromInput","refCount","object","actualCreate","set","actualDelete","TgdProgramImpl","gl","code","prg","createProgram","vertShader","createShader","vert","attachShader","fragShader","frag","linkProgram","getProgramParameter","LINK_STATUS","info","getProgramInfoLog","warn","errorLines","getErrorLines","logCode","program","shaders","uniformsLocations","getUniformsLocations","getAttribLocation","name","loc","getUniformLocation","names","location","uniform1f","uniform2f","uniform3f","uniform3fv","vec3","uniform4f","uniform4fv","vec4","uniform1i","uniform2i","uniform3i","uniform4i","uniform1ui","uniform2ui","uniform3ui","uniform4ui","uniformMatrix4fv","use","useProgram","forEach","shader","deleteShader","deleteProgram","type","shaderSource","compileShader","getShaderInfoLog","error","count","ACTIVE_UNIFORMS","uniforms","uniform","getActiveUniform","RX_ERROR_LINE","message","lines","messages","line","split","lastIndex","match","exec","parseInt","substring","trim","style","background","bold","title","errors","num","prefix","TgdResourceProgram","JSON","stringify","TgdLoaderImage","image","url","Promise","resolve","img","Image","onload","onerror","src","canvas","document","createElement","width","naturalWidth","height","naturalHeight","ctx","getContext","drawImage","TgdEvent","listeners","Set","addListener","listener","removeListener","dispatch","tgdCreateCanvas2D","settings","DEFAULT_DATA","Uint8Array","TgdTexture2DImpl","context","options","eventImageUpdate","_width","_height","_image","wrapS","wrapT","wrapR","minFilter","magFilter","texture","createTexture","bindTexture","TEXTURE_2D","texImage2D","RGBA","UNSIGNED_BYTE","texParameteri","TEXTURE_WRAP_S","TEXTURE_WRAP_T","TEXTURE_WRAP_R","TEXTURE_MIN_FILTER","TEXTURE_MAG_FILTER","loadImage","makePalette","colors","colums","ceil","fillStyle","fillRect","fillHorizontalGradient","fillGradient","fillverticalGradient","dirX","dirY","gradient","createLinearGradient","addColorStop","position","deleteTexture","bind","activate","uniformName","slot","activeTexture","TEXTURE0","then","catch","pixelStorei","UNPACK_FLIP_Y_WEBGL","generateMipmap","TgdTextureCubeImpl","numberOfImagesToLoad","TEXTURE_CUBE_MAP_POSITIVE_X","imagePosX","TEXTURE_CUBE_MAP_NEGATIVE_X","imageNegX","TEXTURE_CUBE_MAP_POSITIVE_Y","imagePosY","TEXTURE_CUBE_MAP_NEGATIVE_Y","imageNegY","TEXTURE_CUBE_MAP_POSITIVE_Z","imagePosZ","TEXTURE_CUBE_MAP_NEGATIVE_Z","imageNegZ","ready","TEXTURE_CUBE_MAP","ex","LINEAR_MIPMAP_LINEAR","TgdResourceTexture2D","TgdResourceTextureCube","TgdBuffer","data","buffer","createBuffer","_target","_usage","usage","bufferData","bindBuffer","deleteBuffer","TgdVertexArray","datasets","elements","drawBuffers","elemBuffer","vao","createVertexArray","bindVertexArray","dataset","dataView","defineAttributes","unbind","deleteVertexArray","buff","TgdInputKeyboardImpl","keysDown","keysUp","attached","handleKeyDown","evt","handleKeyUp","addEventListener","detach","removeEventListener","isDown","hasClicked","TgdInputPointerImpl","eventMoveStart","eventMove","eventMoveEnd","eventZoom","inertia","start","t","fingersCount","current","previous","canvasX","canvasY","screenX","screenY","inertiaDirX","inertiaDirY","inertiaStop","inertiaRunning","inertiaTimeStamp","inertiaLastRefresh","handleCanvasWheel","delta","deltaX","deltaY","deltaZ","getPoint","direction","preventDefault","handleCanvasPointerDown","isPrimary","clientX","clientY","handlePointerDown","point","handlePointerMove","handlePointerUp","dt","window","requestAnimationFrame","simulateInertia","alpha","vx","vy","getBoundingClientRect","timeStamp","TgdInputs","_keyboard","_pointer","keyboard","pointer","TgdContext","_texturesCube","isPlaying","lastTime","cancelAnimationFrame","actualPaint","drawingBufferWidth","drawingBufferHeight","programs","textures2D","onResize","handleResize","observer","ResizeObserver","clientWidth","clientHeight","observe","inputs","touchAction","texturesCube","playing","play","pause","createVAO","destroy","unobserve","viewport","TgdControllerCameraOrbit","speedZoom","speedOrbit","enabled","eventZoomChange","eventOrbitChange","handleMove","ang","atan2","fireOrbitChange","speed","dx","dy","handleZoom","dz","fireZoomChange","TgdDataset","attributesDefinition","divisor","stride","definitions","ArrayBuffer","def","dimension","DIMS","bytesOffset","bytesPerElement","BYTES_PER_ELEMENT","getter","view","byteOffset","byteLength","getFloat32","setter","setFloat32","dataPerAttribute","attribName","viewDestination","DataView","offsetDestination","vertex","viewSource","offsetSource","dim","att","enableVertexAttribArray","vertexAttribPointer","FLOAT","vertexAttribDivisor","float","vec2","TgdPainterAxis","attPos","attColor","b","translateAndScale","drawArrays","LINES","TgdPainterBackground","attPoint","attUV","horizontal","scaleX","scaleY","TRIANGLE_STRIP","TgdPainterClear","clearMask","red","green","blue","depth","color","hasAnyOption","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","_time","_delay","clearColor","clearDepth","clear","update","TgdPainterDepth","func","mask","rangeMin","rangeMax","disable","DEPTH_TEST","enable","depthFunc","depthMask","depthRange","TgdPainterLogic","logicFunction","TgdPainterSegments","factory","roundness","minRadius","radiusMultiplier","light","shiftZ","tex","colorTexture","capsule","offset","L","e0","e1","e2","i0","i1","i2","oldIndexA","oldIndexB","elemIndex","attOffset","makeCapsule","instance","makeDataset","vertexCount","instanceCount","drawElementsInstanced","TRIANGLES","TgdPainterSegmentsData","_count","attAxyzr","attAuv","attBxyzr","attBuv","xA","yA","zA","radiusA","uA","vA","xB","yB","zB","radiusB","uB","vB","TgdPainterSkybox","matrix","tmpMat","TgdParserMeshWavefront","attPosition","attNormal","elementIndex","vertices","normals","uvs","onObject","onVertex","onNormal","onTexture","u","onFace","getElem","parse","content","fullLine","len","cursor","forEachLine","trimStart","startsWith","Number","isVector3","normal","undefined","uv","result","floor","Uint16Array","Uint32Array","vz","nx","ny","nz"],"sourceRoot":""}
|
package/lib/dist/mesh/mesh.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare class TgdMesh {
|
|
2
|
-
private readonly points;
|
|
3
|
-
private pointsIndex;
|
|
4
|
-
addPoint(x: number, y: number, z: number): number;
|
|
5
|
-
getPointX(index: number): number;
|
|
6
|
-
getPointY(index: number): number;
|
|
7
|
-
getPointZ(index: number): number;
|
|
8
|
-
get pointsCount(): number;
|
|
9
|
-
findPointCloseTo(x: number, y: number, z: number, epsilon?: number): number;
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=mesh.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mesh.d.ts","sourceRoot":"","sources":["../../src/mesh/mesh.ts"],"names":[],"mappings":"AAIA,qBAAa,OAAO;IAIhB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,WAAW,CAAI;IAQvB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAMjD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAGhC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAGhC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIhC,IAAI,WAAW,WAEd;IAED,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,SAAO,GAAG,MAAM;CAW5E"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
declare const SHADER = "#version 300 es\n\nprecision mediump float;\n\nuniform sampler2D uniTexture;\nin vec2 varUV;\nout vec4 FragColor;\n\nconst float EPSILON = 1.0 / 256.0;\n\nvoid main() {\n vec4 color = texture(uniTexture, varUV);\n if (color.a < EPSILON) discard;\n\n FragColor = color;\n float light = color.g < 0.001 ? 1.0 : 0.0;\n FragColor =mix(vec4(varUV, 0, 1), vec4(light, light, light, 1), 0.5);\n if (color.b < 0.001) FragColor = vec4(0,0,1,1);\n}";
|
|
2
|
-
export default SHADER;
|
|
3
|
-
//# sourceMappingURL=isometric.frag.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"isometric.frag.d.ts","sourceRoot":"","sources":["../../../src/painter/isometric/isometric.frag.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,MAAM,6cAA6c,CAAA;AACzd,eAAe,MAAM,CAAA"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
declare const SHADER = "#version 300 es\n\nuniform vec3 uniCenter; // Coordonn\u00E9es du centre de l'\u00E9cran.\nuniform vec3 uniScale; // \u00C9chelle pour garder l'aspect ratio.\n\n// Instance\nlayout(location=0) in vec3 attPos;\nlayout(location=1) in vec4 attCell;\n\n// Vertex\nlayout(location=2) in vec2 attCorner;\nlayout(location=3) in vec2 attUV;\n\nout vec2 varUV;\n\nconst mat3 PROJ = mat3(\n 1.0, -1.0, 0.0,\n 0.5, 0.5, 0.0,\n 0.0, 0.0, 1.0\n);\n\nvoid main() {\n varUV = attUV * attCell.zw + attCell.xy;\n vec3 pos = PROJ * (attPos - uniCenter) + vec3(attCorner, 0.0);\n gl_Position = vec4(pos * uniScale, 1.0);\n}";
|
|
2
|
-
export default SHADER;
|
|
3
|
-
//# sourceMappingURL=isometric.vert.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"isometric.vert.d.ts","sourceRoot":"","sources":["../../../src/painter/isometric/isometric.vert.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,MAAM,qnBAAsmB,CAAA;AAClnB,eAAe,MAAM,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"primitive.frag.d.ts","sourceRoot":"","sources":["../../../src/painter/primitive/primitive.frag.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,MAAM,2IAA2I,CAAA;AACvJ,eAAe,MAAM,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"primitive.vert.d.ts","sourceRoot":"","sources":["../../../src/painter/primitive/primitive.vert.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,MAAM,+IAA+I,CAAA;AAC3J,eAAe,MAAM,CAAA"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
declare const SHADER = "#version 300 es\n\nprecision mediump float;\n\nuniform sampler2D uniTexture;\n\nin vec2 varUV;\nout vec4 FragColor;\n\nvoid main() {\n FragColor = texture( uniTexture, varUV );\n if (FragColor.a < 0.01) discard;\n}";
|
|
2
|
-
export default SHADER;
|
|
3
|
-
//# sourceMappingURL=sprites-painter.frag.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sprites-painter.frag.d.ts","sourceRoot":"","sources":["../../../src/painter/sprites/sprites-painter.frag.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,MAAM,6NAA6N,CAAA;AACzO,eAAe,MAAM,CAAA"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
declare const SHADER = "#version 300 es\n\nuniform mat4 uniCamera;\nin vec2 attPoint;\nin vec2 attAtlasXY;\nin vec2 attAtlasWH;\nin vec2 attCenter;\nin mat2 attTransform;\nin vec3 attPosition;\nout vec2 varUV;\n\nvoid main() {\n varUV = attPoint * attAtlasWH + attAtlasXY;\n vec3 point = vec3(attTransform * (attPoint - attCenter) * attAtlasWH, 0.0) + attPosition;\n gl_Position = uniCamera * vec4(point, 1.0);\n}\n";
|
|
2
|
-
export default SHADER;
|
|
3
|
-
//# sourceMappingURL=sprites-painter.vert.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sprites-painter.vert.d.ts","sourceRoot":"","sources":["../../../src/painter/sprites/sprites-painter.vert.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,MAAM,qZAAqZ,CAAA;AACja,eAAe,MAAM,CAAA"}
|