@tolokoban/tgd 2.0.0 → 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 +14 -12
- 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 +20 -16
- 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 +95 -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 +111 -12
- 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 +88 -8
- 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 +80 -11
- 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 +2 -0
- package/lib/dist/event/index.d.ts.map +1 -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 +9 -0
- package/lib/dist/index.d.ts.map +1 -1
- package/lib/dist/index.js +21 -1
- package/lib/dist/input/index.d.ts +2 -0
- package/lib/dist/input/index.d.ts.map +1 -1
- package/lib/dist/input/index.js +4 -0
- package/lib/dist/input/inputs.d.ts +11 -0
- package/lib/dist/input/inputs.d.ts.map +1 -0
- package/lib/dist/input/inputs.js +23 -0
- package/lib/dist/input/keyboard.d.ts +6 -2
- 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 +24 -40
- 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 +26 -12
- 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 +26 -0
- package/lib/dist/painter/axis/axis.d.ts.map +1 -0
- 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 +2 -0
- package/lib/dist/painter/axis/index.d.ts.map +1 -0
- package/lib/dist/painter/axis/index.js +2 -0
- package/lib/dist/painter/background/background.d.ts +11 -8
- 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 +15 -10
- 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 +22 -0
- package/lib/dist/painter/depth.d.ts.map +1 -0
- 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 +16 -4
- 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 +10 -5
- 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 +4 -2
- 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 -1
- 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 +2 -0
- package/lib/dist/painter/segments/index.d.ts.map +1 -0
- package/lib/dist/painter/segments/index.js +2 -0
- package/lib/dist/painter/segments/segments.d.ts +85 -0
- package/lib/dist/painter/segments/segments.d.ts.map +1 -0
- 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 +11 -17
- 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 +17 -2
- 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 +2 -2
- 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 +10 -4
- 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 +8 -9
- 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 +7 -9
- 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 +14 -9
- 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 +4 -5
- 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 +25 -0
- package/lib/dist/types/context.d.ts.map +1 -0
- 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 +5 -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 +8 -0
- package/lib/dist/types/input-keyboard.d.ts.map +1 -0
- package/lib/dist/types/input-keyboard.js +2 -0
- package/lib/dist/types/input-pointer.d.ts +42 -0
- package/lib/dist/types/input-pointer.d.ts.map +1 -0
- 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 +2 -0
- package/lib/dist/types/painter.d.ts.map +1 -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 +20 -8
- 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 +42 -3
- 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 -0
- 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 +13 -0
- package/lib/dist/utils/canvas.d.ts.map +1 -0
- 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 +6 -0
- package/lib/dist/utils/index.d.ts.map +1 -0
- 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 +7 -3
- package/lib/dist/vao/vao.d.ts.map +1 -1
- package/lib/dist/vao/vao.js +67 -0
- package/package.json +6 -5
- 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
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { forEachLine } from "../for-each-line.js";
|
|
2
|
+
import { TgdVec3 } from "./../../math/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* This [Wavefront](https://en.wikipedia.org/wiki/Wavefront_.obj_file)
|
|
5
|
+
* parser only finds the object name,
|
|
6
|
+
* the vertices coords, the normals and the UVs.
|
|
7
|
+
*
|
|
8
|
+
* - There can be only one object per file.
|
|
9
|
+
* - Normals and UVs are optional.
|
|
10
|
+
* - All faces **must** be triangles.
|
|
11
|
+
*
|
|
12
|
+
* To export an obj file from blender, please use the following options:
|
|
13
|
+
*
|
|
14
|
+
* - Forward axis: **Y**
|
|
15
|
+
* - Up axis: **Z**
|
|
16
|
+
* - Object / Apply Modifiers: **True**
|
|
17
|
+
* - Geometry / UV Coordinates: **True**
|
|
18
|
+
* - Geometry / Normals: **True**
|
|
19
|
+
* - Geometry / Triangulated Mesh: **True**
|
|
20
|
+
*/
|
|
21
|
+
export class TgdParserMeshWavefront {
|
|
22
|
+
name = "Mesh";
|
|
23
|
+
attPosition = [];
|
|
24
|
+
attNormal = [];
|
|
25
|
+
attUV = [];
|
|
26
|
+
/**
|
|
27
|
+
* Three consecutive elements define a triangle.
|
|
28
|
+
* An element is a index on the attributes array.
|
|
29
|
+
*/
|
|
30
|
+
elements = [];
|
|
31
|
+
elementIndex = 0;
|
|
32
|
+
/**
|
|
33
|
+
* The key is `${pointIndex}/${normalIndex}/${uvIndex}`.
|
|
34
|
+
* The value is the index of the vertex (used in `elements`).
|
|
35
|
+
*/
|
|
36
|
+
mapVertices = new Map();
|
|
37
|
+
/**
|
|
38
|
+
* A point ins not a vertex, but just a position in space
|
|
39
|
+
* that can be used by several different vertices.
|
|
40
|
+
* That's the case for faces sharing a vertex but having different
|
|
41
|
+
* normals. A vertex is made of a position, a normal and an uv.
|
|
42
|
+
*/
|
|
43
|
+
points = [];
|
|
44
|
+
/**
|
|
45
|
+
* A item of this array can be shared by different vertices.
|
|
46
|
+
*/
|
|
47
|
+
normals = [];
|
|
48
|
+
/**
|
|
49
|
+
* List of vertices per face.
|
|
50
|
+
* The vertices are represented by the index of the attribute.
|
|
51
|
+
*/
|
|
52
|
+
verticesPerTriangle = [];
|
|
53
|
+
/**
|
|
54
|
+
* Here "normal" is an index on `this.normals` array.
|
|
55
|
+
*/
|
|
56
|
+
normalPerTriangle = [];
|
|
57
|
+
/**
|
|
58
|
+
* The vertices are indexed per attribute.
|
|
59
|
+
* The triangles are represented by indexes from `this.normalPerTriangle`.
|
|
60
|
+
*/
|
|
61
|
+
trianglesPerVertex = [];
|
|
62
|
+
/**
|
|
63
|
+
* A item of this array can be shared by different vertices.
|
|
64
|
+
*/
|
|
65
|
+
uvs = [];
|
|
66
|
+
parse(content, { computeNormals } = {}) {
|
|
67
|
+
this.reset();
|
|
68
|
+
const { onVertex, onNormal, onTexture, onFace, onObject, name, elements, } = this;
|
|
69
|
+
parse(content, { onVertex, onNormal, onTexture, onFace, onObject });
|
|
70
|
+
if (computeNormals)
|
|
71
|
+
this.computeNormals();
|
|
72
|
+
const result = {
|
|
73
|
+
name,
|
|
74
|
+
count: elements.length,
|
|
75
|
+
attPosition: new Float32Array(this.attPosition),
|
|
76
|
+
};
|
|
77
|
+
if (this.attNormal.length > 0) {
|
|
78
|
+
result.attNormal = new Float32Array(this.attNormal);
|
|
79
|
+
}
|
|
80
|
+
if (this.attUV.length > 0) {
|
|
81
|
+
result.attUV = new Float32Array(this.attUV);
|
|
82
|
+
}
|
|
83
|
+
const { elementIndex } = this;
|
|
84
|
+
if (elementIndex <= 256) {
|
|
85
|
+
return {
|
|
86
|
+
...result,
|
|
87
|
+
type: "UNSIGNED_BYTE",
|
|
88
|
+
elements: new Uint8Array(elements),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (elementIndex <= 0x10000) {
|
|
92
|
+
return {
|
|
93
|
+
...result,
|
|
94
|
+
type: "UNSIGNED_SHORT",
|
|
95
|
+
elements: new Uint16Array(elements),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
...result,
|
|
100
|
+
type: "UNSIGNED_INT",
|
|
101
|
+
elements: new Uint32Array(elements),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
computeNormals() {
|
|
105
|
+
const A = new TgdVec3();
|
|
106
|
+
const B = new TgdVec3();
|
|
107
|
+
const C = new TgdVec3();
|
|
108
|
+
this.normalPerTriangle.forEach((normal, triIdx) => {
|
|
109
|
+
const [v0, v1, v2] = this.verticesPerTriangle[triIdx];
|
|
110
|
+
this.readVertexInto(v0, A);
|
|
111
|
+
this.readVertexInto(v1, B).subtract(A);
|
|
112
|
+
this.readVertexInto(v2, C).subtract(A);
|
|
113
|
+
normal.from(B.cross(C).normalize());
|
|
114
|
+
});
|
|
115
|
+
this.attNormal = [];
|
|
116
|
+
for (let e = 0; e < this.elementIndex; e++) {
|
|
117
|
+
const normal = new TgdVec3(0, 0, 0);
|
|
118
|
+
this.trianglesPerVertex[e].forEach(triIndex => normal.add(this.normalPerTriangle[triIndex]));
|
|
119
|
+
const [nx, ny, nz] = normal.normalize();
|
|
120
|
+
this.attNormal.push(nx, ny, nz);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
reset() {
|
|
124
|
+
this.name = "Mesh";
|
|
125
|
+
this.attPosition = [];
|
|
126
|
+
this.attNormal = [];
|
|
127
|
+
this.attUV = [];
|
|
128
|
+
this.elements = [];
|
|
129
|
+
this.elementIndex = 0;
|
|
130
|
+
this.points = [];
|
|
131
|
+
this.normals = [];
|
|
132
|
+
this.verticesPerTriangle = [];
|
|
133
|
+
this.trianglesPerVertex = [];
|
|
134
|
+
this.normalPerTriangle = [];
|
|
135
|
+
this.uvs = [];
|
|
136
|
+
this.mapVertices.clear();
|
|
137
|
+
this.mapVertices.clear();
|
|
138
|
+
}
|
|
139
|
+
onObject = (name) => {
|
|
140
|
+
this.name = name;
|
|
141
|
+
};
|
|
142
|
+
onVertex = (x, y, z) => {
|
|
143
|
+
this.points.push([x, y, z]);
|
|
144
|
+
};
|
|
145
|
+
onNormal = (x, y, z) => {
|
|
146
|
+
this.normals.push([x, y, z]);
|
|
147
|
+
};
|
|
148
|
+
onTexture = (u, v) => {
|
|
149
|
+
this.uvs.push([u, v]);
|
|
150
|
+
};
|
|
151
|
+
onFace = (vertices) => {
|
|
152
|
+
if (vertices.length !== 3)
|
|
153
|
+
throw Error("We can only deal with triangles!");
|
|
154
|
+
const triangle = vertices.map(this.getElem);
|
|
155
|
+
this.elements.push(...triangle);
|
|
156
|
+
this.normalPerTriangle.push(new TgdVec3(0, 0, 0));
|
|
157
|
+
this.verticesPerTriangle.push(triangle);
|
|
158
|
+
const triangleIndex = this.normalPerTriangle.length - 1;
|
|
159
|
+
triangle.forEach(vertexIndex => {
|
|
160
|
+
this.trianglesPerVertex[vertexIndex] ??= [];
|
|
161
|
+
this.trianglesPerVertex[vertexIndex].push(triangleIndex);
|
|
162
|
+
});
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Return the index of the vertex for the triplet
|
|
166
|
+
* point/normal/uv.
|
|
167
|
+
*/
|
|
168
|
+
getElem = (triangleSummit) => {
|
|
169
|
+
const k = this.key(triangleSummit);
|
|
170
|
+
const index = this.mapVertices.get(k) ?? -1;
|
|
171
|
+
if (index > -1)
|
|
172
|
+
return index;
|
|
173
|
+
const [vx, vy, vz] = this.points[triangleSummit.vertex];
|
|
174
|
+
this.attPosition.push(vx, vy, vz);
|
|
175
|
+
if (typeof triangleSummit.normal === "number") {
|
|
176
|
+
const [nx, ny, nz] = this.normals[triangleSummit.normal];
|
|
177
|
+
this.attNormal.push(nx, ny, nz);
|
|
178
|
+
}
|
|
179
|
+
if (typeof triangleSummit.uv === "number") {
|
|
180
|
+
const [tx, ty] = this.uvs[triangleSummit.uv];
|
|
181
|
+
this.attUV.push(tx, ty);
|
|
182
|
+
}
|
|
183
|
+
this.mapVertices.set(k, this.elementIndex);
|
|
184
|
+
return this.elementIndex++;
|
|
185
|
+
};
|
|
186
|
+
key(v) {
|
|
187
|
+
return `${v.vertex}/${v.normal}`;
|
|
188
|
+
}
|
|
189
|
+
readVertexInto(index, target) {
|
|
190
|
+
const P = this.attPosition;
|
|
191
|
+
const k = index * 3;
|
|
192
|
+
target.reset(P[k + 0], P[k + 1], P[k + 2]);
|
|
193
|
+
return target;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function parse(content, options = {}) {
|
|
197
|
+
const { onVertex, onNormal, onTexture, onFace, onObject } = options;
|
|
198
|
+
for (const fullLine of forEachLine(content)) {
|
|
199
|
+
const line = fullLine.trimStart();
|
|
200
|
+
if (onVertex && line.startsWith("v ")) {
|
|
201
|
+
const vertex = line
|
|
202
|
+
.substring("v ".length)
|
|
203
|
+
.split(" ")
|
|
204
|
+
.map(v => Number(v));
|
|
205
|
+
if (isVector3(vertex))
|
|
206
|
+
onVertex(...vertex);
|
|
207
|
+
}
|
|
208
|
+
else if (onFace && line.startsWith("f ")) {
|
|
209
|
+
onFace(line
|
|
210
|
+
.substring("f ".length)
|
|
211
|
+
.split(" ")
|
|
212
|
+
// Warning! We need to remove 1 to the index.
|
|
213
|
+
.map(face => {
|
|
214
|
+
const [v, t, n] = face.split("/");
|
|
215
|
+
return {
|
|
216
|
+
vertex: Number(v) - 1,
|
|
217
|
+
normal: n ? Number(n) - 1 : undefined,
|
|
218
|
+
uv: t ? Number(t) - 1 : undefined,
|
|
219
|
+
};
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
222
|
+
else if (onNormal && line.startsWith("vn ")) {
|
|
223
|
+
const normal = line
|
|
224
|
+
.substring("vn ".length)
|
|
225
|
+
.split(" ")
|
|
226
|
+
.map(n => Number(n));
|
|
227
|
+
if (isVector3(normal))
|
|
228
|
+
onNormal(...normal);
|
|
229
|
+
}
|
|
230
|
+
else if (onTexture && line.startsWith("vt ")) {
|
|
231
|
+
const [u, v, w] = line
|
|
232
|
+
.substring("vt ".length)
|
|
233
|
+
.split(" ")
|
|
234
|
+
.map(n => Number(n));
|
|
235
|
+
onTexture(u, v, w);
|
|
236
|
+
}
|
|
237
|
+
else if (onObject && line.startsWith("o ")) {
|
|
238
|
+
const name = line.substring("o ".length);
|
|
239
|
+
onObject(name);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
function isVector3(data) {
|
|
244
|
+
return data.length === 3;
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F2ZWZyb250LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhcnNlci9tZXNoL3dhdmVmcm9udC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQVFuQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ3ZCLElBQUksR0FBRyxNQUFNLENBQUE7SUFDYixXQUFXLEdBQWEsRUFBRSxDQUFBO0lBQzFCLFNBQVMsR0FBYSxFQUFFLENBQUE7SUFDeEIsS0FBSyxHQUFhLEVBQUUsQ0FBQTtJQUM1Qjs7O09BR0c7SUFDSyxRQUFRLEdBQWEsRUFBRSxDQUFBO0lBRXZCLFlBQVksR0FBRyxDQUFDLENBQUE7SUFDeEI7OztPQUdHO0lBQ2MsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFBO0lBQ3hEOzs7OztPQUtHO0lBQ0ssTUFBTSxHQUErQixFQUFFLENBQUE7SUFDL0M7O09BRUc7SUFDSyxPQUFPLEdBQStCLEVBQUUsQ0FBQTtJQUNoRDs7O09BR0c7SUFDSyxtQkFBbUIsR0FBZSxFQUFFLENBQUE7SUFDNUM7O09BRUc7SUFDSyxpQkFBaUIsR0FBYyxFQUFFLENBQUE7SUFDekM7OztPQUdHO0lBQ0ssa0JBQWtCLEdBQWUsRUFBRSxDQUFBO0lBQzNDOztPQUVHO0lBQ0ssR0FBRyxHQUFlLEVBQUUsQ0FBQTtJQUU1QixLQUFLLENBQ0QsT0FBZSxFQUNmLEVBQUUsY0FBYyxLQUFtQyxFQUFFO1FBRXJELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNaLE1BQU0sRUFDRixRQUFRLEVBQ1IsUUFBUSxFQUNSLFNBQVMsRUFDVCxNQUFNLEVBQ04sUUFBUSxFQUNSLElBQUksRUFDSixRQUFRLEdBQ1gsR0FBRyxJQUFJLENBQUE7UUFDUixLQUFLLENB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
|
|
File without changes
|
|
File without changes
|
|
@@ -1,11 +1,22 @@
|
|
|
1
|
-
import { TgdMat4, TgdVec3, TgdVec4 } from "
|
|
2
|
-
import { TgdProgram, TgdProgramOptions } from "
|
|
1
|
+
import { TgdMat4, TgdVec3, TgdVec4 } from "../math";
|
|
2
|
+
import { TgdProgram, TgdProgramOptions } from "../types";
|
|
3
|
+
/**
|
|
4
|
+
* This class helps to manage a WebGLProgram.
|
|
5
|
+
* It will report meaninfull errors and help you with
|
|
6
|
+
* the uniforms.
|
|
7
|
+
*/
|
|
3
8
|
export declare class TgdProgramImpl implements TgdProgram {
|
|
4
9
|
readonly gl: WebGL2RenderingContext;
|
|
10
|
+
private readonly code;
|
|
11
|
+
/** Access to the real WebGLProgram object. */
|
|
5
12
|
readonly program: WebGLProgram;
|
|
6
13
|
private readonly shaders;
|
|
7
14
|
private readonly uniformsLocations;
|
|
8
15
|
constructor(gl: WebGL2RenderingContext, code: TgdProgramOptions);
|
|
16
|
+
toCode({ indent }?: Partial<{
|
|
17
|
+
indent: string;
|
|
18
|
+
}>): string;
|
|
19
|
+
hasAttribute(name: string): boolean;
|
|
9
20
|
getAttribLocation(name: string): number;
|
|
10
21
|
getUniformLocation(name: string): WebGLUniformLocation;
|
|
11
22
|
uniform1f(name: string, value: number): void;
|
|
@@ -23,6 +34,10 @@ export declare class TgdProgramImpl implements TgdProgram {
|
|
|
23
34
|
uniform3ui(name: string, x: number, y: number, z: number): void;
|
|
24
35
|
uniform4ui(name: string, x: number, y: number, z: number, w: number): void;
|
|
25
36
|
uniformMatrix4fv(name: string, mat4: TgdMat4): void;
|
|
37
|
+
/**
|
|
38
|
+
* Use the current program.
|
|
39
|
+
* This is equivalent to `gl.useProgram(program)`.
|
|
40
|
+
*/
|
|
26
41
|
use(): void;
|
|
27
42
|
delete(): void;
|
|
28
43
|
private createShader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/program/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/program/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE1D;;;;GAIG;AACH,qBAAa,cAAe,YAAW,UAAU;aAQzB,EAAE,EAAE,sBAAsB;IAC1C,OAAO,CAAC,QAAQ,CAAC,IAAI;IARzB,8CAA8C;IAC9C,SAAgB,OAAO,EAAE,YAAY,CAAA;IAErC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0C;gBAGxD,EAAE,EAAE,sBAAsB,EACzB,IAAI,EAAE,iBAAiB;IA2B5C,MAAM,CAAC,EAAE,MAAW,EAAE,GAAE,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAM;IAmBxD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAMnC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASvC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB;IAoBtD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAKrC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAK5C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAKvD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;IAKtC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAKlE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;IAKtC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAKrC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAK5C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAKvD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAKlE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAKtC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAK7C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAKxD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAKnE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;IAK5C;;;OAGG;IACH,GAAG;IAKH,MAAM;IAMN,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,oBAAoB;CA0B/B"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This class helps to manage a WebGLProgram.
|
|
3
|
+
* It will report meaninfull errors and help you with
|
|
4
|
+
* the uniforms.
|
|
5
|
+
*/
|
|
6
|
+
export class TgdProgramImpl {
|
|
7
|
+
gl;
|
|
8
|
+
code;
|
|
9
|
+
/** Access to the real WebGLProgram object. */
|
|
10
|
+
program;
|
|
11
|
+
shaders;
|
|
12
|
+
uniformsLocations;
|
|
13
|
+
constructor(gl, code) {
|
|
14
|
+
this.gl = gl;
|
|
15
|
+
this.code = code;
|
|
16
|
+
const prg = gl.createProgram();
|
|
17
|
+
if (!prg)
|
|
18
|
+
throw Error("Unable to create WebGLProgram!");
|
|
19
|
+
const vertShader = this.createShader("VERTEX_SHADER", code.vert);
|
|
20
|
+
gl.attachShader(prg, vertShader);
|
|
21
|
+
const fragShader = this.createShader("FRAGMENT_SHADER", code.frag);
|
|
22
|
+
gl.attachShader(prg, fragShader);
|
|
23
|
+
gl.linkProgram(prg);
|
|
24
|
+
if (!gl.getProgramParameter(prg, gl.LINK_STATUS)) {
|
|
25
|
+
const info = gl.getProgramInfoLog(prg) ?? "";
|
|
26
|
+
console.warn(info);
|
|
27
|
+
const errorLines = getErrorLines(info);
|
|
28
|
+
logCode("Vertex Shader", code.vert, errorLines);
|
|
29
|
+
logCode("Fragment Shader", code.frag, errorLines);
|
|
30
|
+
throw new Error("Could NOT link WebGL2 program!\n" + info);
|
|
31
|
+
}
|
|
32
|
+
this.program = prg;
|
|
33
|
+
this.shaders = [vertShader, fragShader];
|
|
34
|
+
this.uniformsLocations = this.getUniformsLocations();
|
|
35
|
+
gl.detachShader(prg, vertShader);
|
|
36
|
+
gl.deleteShader(vertShader);
|
|
37
|
+
gl.detachShader(prg, fragShader);
|
|
38
|
+
gl.deleteShader(fragShader);
|
|
39
|
+
}
|
|
40
|
+
toCode({ indent = "" } = {}) {
|
|
41
|
+
const lines = [
|
|
42
|
+
`function createProgram(gl: WebGL2RenderingContext) {`,
|
|
43
|
+
` const prg = gl.createProgram()`,
|
|
44
|
+
` const vertexShader = gl.createShader(gl.VERTEX_SHADER)`,
|
|
45
|
+
` gl.shaderSource(vertexShader, \`${this.code.vert}\`)`,
|
|
46
|
+
` gl.compileShader(vertexShader)`,
|
|
47
|
+
` const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER)`,
|
|
48
|
+
` gl.shaderSource(fragmentShader, \`${this.code.frag}\`)`,
|
|
49
|
+
` gl.compileShader(fragmentShader)`,
|
|
50
|
+
` gl.attachShader(prg, vertexShader)`,
|
|
51
|
+
` gl.attachShader(prg, fragmentShader)`,
|
|
52
|
+
` gl.linkProgram(prg)`,
|
|
53
|
+
` return prg`,
|
|
54
|
+
`}`,
|
|
55
|
+
];
|
|
56
|
+
return lines.map(line => `${indent}${line}`).join("\n");
|
|
57
|
+
}
|
|
58
|
+
hasAttribute(name) {
|
|
59
|
+
const { gl, program } = this;
|
|
60
|
+
const loc = gl.getAttribLocation(program, name);
|
|
61
|
+
return loc >= 0;
|
|
62
|
+
}
|
|
63
|
+
getAttribLocation(name) {
|
|
64
|
+
const { gl, program } = this;
|
|
65
|
+
const loc = gl.getAttribLocation(program, name);
|
|
66
|
+
if (loc < 0) {
|
|
67
|
+
throw Error(`Attribute "${name}" not found!`);
|
|
68
|
+
}
|
|
69
|
+
return loc;
|
|
70
|
+
}
|
|
71
|
+
getUniformLocation(name) {
|
|
72
|
+
const { uniformsLocations } = this;
|
|
73
|
+
const names = Object.keys(uniformsLocations);
|
|
74
|
+
if (name.length === 0) {
|
|
75
|
+
console.warn(`Uniform "${name}" has not been found: there is no active uniform in this program!`);
|
|
76
|
+
return 0;
|
|
77
|
+
}
|
|
78
|
+
const location = uniformsLocations[name];
|
|
79
|
+
if (!location) {
|
|
80
|
+
console.warn(`No active uniform found with name "${name}"!\nAvailable names are: ${names.join(", ")}.`);
|
|
81
|
+
}
|
|
82
|
+
return location;
|
|
83
|
+
}
|
|
84
|
+
uniform1f(name, value) {
|
|
85
|
+
const { gl } = this;
|
|
86
|
+
gl.uniform1f(this.getUniformLocation(name), value);
|
|
87
|
+
}
|
|
88
|
+
uniform2f(name, x, y) {
|
|
89
|
+
const { gl } = this;
|
|
90
|
+
gl.uniform2f(this.getUniformLocation(name), x, y);
|
|
91
|
+
}
|
|
92
|
+
uniform3f(name, x, y, z) {
|
|
93
|
+
const { gl } = this;
|
|
94
|
+
gl.uniform3f(this.getUniformLocation(name), x, y, z);
|
|
95
|
+
}
|
|
96
|
+
uniform3fv(name, vec3) {
|
|
97
|
+
const { gl } = this;
|
|
98
|
+
gl.uniform3fv(this.getUniformLocation(name), vec3);
|
|
99
|
+
}
|
|
100
|
+
uniform4f(name, x, y, z, w) {
|
|
101
|
+
const { gl } = this;
|
|
102
|
+
gl.uniform4f(this.getUniformLocation(name), x, y, z, w);
|
|
103
|
+
}
|
|
104
|
+
uniform4fv(name, vec4) {
|
|
105
|
+
const { gl } = this;
|
|
106
|
+
gl.uniform4fv(this.getUniformLocation(name), vec4);
|
|
107
|
+
}
|
|
108
|
+
uniform1i(name, value) {
|
|
109
|
+
const { gl } = this;
|
|
110
|
+
gl.uniform1i(this.getUniformLocation(name), value);
|
|
111
|
+
}
|
|
112
|
+
uniform2i(name, x, y) {
|
|
113
|
+
const { gl } = this;
|
|
114
|
+
gl.uniform2i(this.getUniformLocation(name), x, y);
|
|
115
|
+
}
|
|
116
|
+
uniform3i(name, x, y, z) {
|
|
117
|
+
const { gl } = this;
|
|
118
|
+
gl.uniform3i(this.getUniformLocation(name), x, y, z);
|
|
119
|
+
}
|
|
120
|
+
uniform4i(name, x, y, z, w) {
|
|
121
|
+
const { gl } = this;
|
|
122
|
+
gl.uniform4i(this.getUniformLocation(name), x, y, z, w);
|
|
123
|
+
}
|
|
124
|
+
uniform1ui(name, value) {
|
|
125
|
+
const { gl } = this;
|
|
126
|
+
gl.uniform1ui(this.getUniformLocation(name), value);
|
|
127
|
+
}
|
|
128
|
+
uniform2ui(name, x, y) {
|
|
129
|
+
const { gl } = this;
|
|
130
|
+
gl.uniform2ui(this.getUniformLocation(name), x, y);
|
|
131
|
+
}
|
|
132
|
+
uniform3ui(name, x, y, z) {
|
|
133
|
+
const { gl } = this;
|
|
134
|
+
gl.uniform3ui(this.getUniformLocation(name), x, y, z);
|
|
135
|
+
}
|
|
136
|
+
uniform4ui(name, x, y, z, w) {
|
|
137
|
+
const { gl } = this;
|
|
138
|
+
gl.uniform4ui(this.getUniformLocation(name), x, y, z, w);
|
|
139
|
+
}
|
|
140
|
+
uniformMatrix4fv(name, mat4) {
|
|
141
|
+
const { gl } = this;
|
|
142
|
+
gl.uniformMatrix4fv(this.getUniformLocation(name), false, mat4);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Use the current program.
|
|
146
|
+
* This is equivalent to `gl.useProgram(program)`.
|
|
147
|
+
*/
|
|
148
|
+
use() {
|
|
149
|
+
const { gl, program } = this;
|
|
150
|
+
gl.useProgram(program);
|
|
151
|
+
}
|
|
152
|
+
delete() {
|
|
153
|
+
const { gl } = this;
|
|
154
|
+
this.shaders.forEach(shader => gl.deleteShader(shader));
|
|
155
|
+
gl.deleteProgram(this.program);
|
|
156
|
+
}
|
|
157
|
+
createShader(type, code) {
|
|
158
|
+
const { gl } = this;
|
|
159
|
+
const shader = gl.createShader(gl[type]);
|
|
160
|
+
if (!shader)
|
|
161
|
+
throw Error(`Unable to create a WebGLShader of type "${type}"!`);
|
|
162
|
+
gl.shaderSource(shader, code);
|
|
163
|
+
gl.compileShader(shader);
|
|
164
|
+
const info = gl.getShaderInfoLog(shader);
|
|
165
|
+
if (info) {
|
|
166
|
+
console.error(`Error in ${type} code:`, info);
|
|
167
|
+
const errorLines = getErrorLines(info);
|
|
168
|
+
logCode(type, code, errorLines);
|
|
169
|
+
throw Error(`Unable to compile ${type}!`);
|
|
170
|
+
}
|
|
171
|
+
return shader;
|
|
172
|
+
}
|
|
173
|
+
getUniformsLocations() {
|
|
174
|
+
const { gl, program } = this;
|
|
175
|
+
const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);
|
|
176
|
+
if (typeof count !== "number")
|
|
177
|
+
throw Error("Unable to get the number of uniforms in a WebGLProgram!");
|
|
178
|
+
const uniforms = {};
|
|
179
|
+
for (let index = 0; index < count; index++) {
|
|
180
|
+
const uniform = gl.getActiveUniform(program, index);
|
|
181
|
+
if (!uniform)
|
|
182
|
+
continue;
|
|
183
|
+
const location = gl.getUniformLocation(program, uniform.name);
|
|
184
|
+
if (location === null)
|
|
185
|
+
throw Error(`Unable to get location for uniform "${uniform.name}"!`);
|
|
186
|
+
uniforms[uniform.name] = location;
|
|
187
|
+
}
|
|
188
|
+
return uniforms;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const RX_ERROR_LINE = /^ERROR:[ \t]+([0-9]+):([0-9]+):/g;
|
|
192
|
+
function getErrorLines(message) {
|
|
193
|
+
const lines = [];
|
|
194
|
+
const messages = [];
|
|
195
|
+
for (const line of message.split("\n")) {
|
|
196
|
+
RX_ERROR_LINE.lastIndex = -1;
|
|
197
|
+
const match = RX_ERROR_LINE.exec(line);
|
|
198
|
+
if (match) {
|
|
199
|
+
lines.push(parseInt(match[2], 10));
|
|
200
|
+
messages.push(line.substring(match[0].length).trim());
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return { lines, messages };
|
|
204
|
+
}
|
|
205
|
+
function style(background, bold = false) {
|
|
206
|
+
return `color:#fff;background:${background};font-family:monospace;font-size:80%;font-weight:${bold ? "bolder" : "100"}`;
|
|
207
|
+
}
|
|
208
|
+
function logCode(title, code, errors) {
|
|
209
|
+
console.log(`%c${title}`, "font-weight:bolder;font-size:120%");
|
|
210
|
+
code.split("\n").forEach((line, index) => {
|
|
211
|
+
const num = index + 1;
|
|
212
|
+
const prefix = (num * 1e-4).toFixed(4).substring(2);
|
|
213
|
+
const background = errors.lines.includes(num) ? "#f00" : "#000";
|
|
214
|
+
console.log(`%c${prefix} %c${line}`, style(background), style(background, true));
|
|
215
|
+
if (errors.lines.includes(num)) {
|
|
216
|
+
console.error(errors.messages[errors.lines.indexOf(num)]);
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9ncmFtL3Byb2dyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBUUg7SUFDQztJQVJyQiw4Q0FBOEM7SUFDOUIsT0FBTyxDQUFjO0lBRXBCLE9BQU8sQ0FBZTtJQUN0QixpQkFBaUIsQ0FBMEM7SUFFNUUsWUFDb0IsRUFBMEIsRUFDekIsSUFBdUI7UUFEeEIsT0FBRSxHQUFGLEVBQUUsQ0FBd0I7UUFDekIsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFFeEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQzlCLElBQUksQ0FBQyxHQUFHO1lBQUUsTUFBTSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQTtRQUV2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDaEUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbEUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDaEMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNuQixJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO1lBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbEIs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LEtBQUssRUFBRSxFQUFFO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUE7UUFDckIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNuRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FDUCxLQUFLLE1BQU0sT0FBTyxJQUFJLEVBQUUsRUFDeEIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUNqQixLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUMxQixDQUFBO1FBQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDN0QsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyJ9
|
package/lib/dist/ref-map.d.ts
CHANGED
|
@@ -1,7 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A Reference Map counts how many time you want to insert the same key.
|
|
3
|
+
* And it tells you when you delete it as many times.
|
|
4
|
+
*/
|
|
1
5
|
export default class RefMap<KeyType, ValType> {
|
|
2
6
|
private readonly map;
|
|
3
7
|
private readonly count;
|
|
8
|
+
/**
|
|
9
|
+
* If `key` is already stored in the map,
|
|
10
|
+
* we add a reference to the mapped value and return it.
|
|
11
|
+
* If not, we create the mapped value by calling `factory()`.
|
|
12
|
+
*/
|
|
4
13
|
add(key: KeyType, factory: () => ValType): ValType;
|
|
14
|
+
/**
|
|
15
|
+
* Delete a reference to `key`.
|
|
16
|
+
* If the last reference has been removed,
|
|
17
|
+
* then return the mapped value, otherwise
|
|
18
|
+
* return `undefined`.
|
|
19
|
+
*/
|
|
5
20
|
delete(key: KeyType): ValType | undefined;
|
|
6
21
|
}
|
|
7
22
|
//# sourceMappingURL=ref-map.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ref-map.d.ts","sourceRoot":"","sources":["../src/ref-map.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ref-map.d.ts","sourceRoot":"","sources":["../src/ref-map.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM,CAAC,OAAO,EAAE,OAAO;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA8B;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IAEnD;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,GAAG,OAAO;IAelD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;CAe5C"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A Reference Map counts how many time you want to insert the same key.
|
|
3
|
+
* And it tells you when you delete it as many times.
|
|
4
|
+
*/
|
|
5
|
+
export default class RefMap {
|
|
6
|
+
map = new Map();
|
|
7
|
+
count = new Map();
|
|
8
|
+
/**
|
|
9
|
+
* If `key` is already stored in the map,
|
|
10
|
+
* we add a reference to the mapped value and return it.
|
|
11
|
+
* If not, we create the mapped value by calling `factory()`.
|
|
12
|
+
*/
|
|
13
|
+
add(key, factory) {
|
|
14
|
+
const { map, count } = this;
|
|
15
|
+
if (count.has(key)) {
|
|
16
|
+
count.set(key, 1 + (count.get(key) ?? 0));
|
|
17
|
+
const curVal = map.get(key);
|
|
18
|
+
if (!curVal)
|
|
19
|
+
throw Error("[CountMap] Map should not be empty!");
|
|
20
|
+
return curVal;
|
|
21
|
+
}
|
|
22
|
+
const newVal = factory();
|
|
23
|
+
map.set(key, newVal);
|
|
24
|
+
count.set(key, 1);
|
|
25
|
+
return newVal;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Delete a reference to `key`.
|
|
29
|
+
* If the last reference has been removed,
|
|
30
|
+
* then return the mapped value, otherwise
|
|
31
|
+
* return `undefined`.
|
|
32
|
+
*/
|
|
33
|
+
delete(key) {
|
|
34
|
+
const { map, count } = this;
|
|
35
|
+
if (!map.has(key))
|
|
36
|
+
return;
|
|
37
|
+
const newCount = (count.get(key) ?? 0) - 1;
|
|
38
|
+
if (newCount > 0) {
|
|
39
|
+
count.set(key, newCount);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const value = map.get(key);
|
|
43
|
+
map.delete(key);
|
|
44
|
+
count.delete(key);
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWYtbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sTUFBTTtJQUNOLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQTtJQUNqQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUE7SUFFbkQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxHQUFZLEVBQUUsT0FBc0I7UUFDcEMsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUE7UUFDM0IsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3pDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDM0IsSUFBSSxDQUFDLE1BQU07Z0JBQUUsTUFBTSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQTtZQUMvRCxPQUFPLE1BQU0sQ0FBQTtRQUNqQixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxFQUFFLENBQUE7UUFDeEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDcEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDakIsT0FBTyxNQUFNLENBQUE7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLEdBQVk7UUFDZixNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQTtRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFNO1FBRXpCLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDMUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUN4QixPQUFNO1FBQ1YsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDMUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNmLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDakIsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztDQUNKIn0=
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from "./program.js";
|
|
2
|
+
export * from "./resource.js";
|
|
3
|
+
export * from "./texture2d.js";
|
|
4
|
+
export * from "./textureCube.js";
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVzb3VyY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUE7QUFDekIsY0FBYyxZQUFZLENBQUE7QUFDMUIsY0FBYyxhQUFhLENBQUE7QUFDM0IsY0FBYyxlQUFlLENBQUEifQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { TgdProgram, TgdProgramOptions } from "
|
|
1
|
+
import { TgdProgram, TgdProgramOptions } from "../types";
|
|
2
2
|
import { TgdResource } from "./resource";
|
|
3
|
-
export declare class TgdResourceProgram extends TgdResource<TgdProgramOptions, TgdProgram
|
|
3
|
+
export declare class TgdResourceProgram extends TgdResource<TgdProgramOptions, TgdProgram> {
|
|
4
4
|
readonly gl: WebGL2RenderingContext;
|
|
5
5
|
constructor(gl: WebGL2RenderingContext);
|
|
6
6
|
protected actualCreate(input: TgdProgramOptions): TgdProgram;
|