From c2f61a2f7e0979c16cc748a97f876b73c06fcf01 Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Wed, 10 Jun 2026 22:05:32 +0100 Subject: [PATCH 1/4] Update docs --- docs/assets/search.js | 2 +- ...ality-autoscaler.FpsQualityAutoscaler.html | 8 +++-- ...s_shapes_circle-factory.CircleFactory.html | 2 +- ...g_renderer_noise-renderer.renderNoise.html | 2 +- .../functions/run-animation.runAnimation.html | 4 +-- docs/index.html | 32 +++++++++---------- 6 files changed, 26 insertions(+), 24 deletions(-) diff --git a/docs/assets/search.js b/docs/assets/search.js index ec426da..d1e3a1b 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/docs/classes/graphics_rendering_fps-quality-autoscaler.FpsQualityAutoscaler.html b/docs/classes/graphics_rendering_fps-quality-autoscaler.FpsQualityAutoscaler.html index b5bbccf..41d2646 100644 --- a/docs/classes/graphics_rendering_fps-quality-autoscaler.FpsQualityAutoscaler.html +++ b/docs/classes/graphics_rendering_fps-quality-autoscaler.FpsQualityAutoscaler.html @@ -5,10 +5,12 @@
 const renderer = await compile(...);
const autoscaler = new FpsQualityAutoscaler(renderer);
-
Index

Constructors

Index

Constructors

Properties

Accessors

Methods

Constructors

Properties

fpsHysteresis: number = 5
fpsTarget: number = 30

Accessors

  • get FPS(): number

    Returns number

Methods

  • Autoscaling is also done by calling this function

    -

    Parameters

    • deltaTimeInMilliseconds: number

    Returns void

+

Constructors

Properties

fpsHysteresis: number = 5
scalingEnabled: boolean = true

When false, FPS is still measured but the render scales are left alone.

+
fpsTarget: number = 30

Accessors

  • get FPS(): number

    Returns number

Methods

  • Autoscaling is also done by calling this function

    +

    Parameters

    • deltaTimeInMilliseconds: number

    Returns void

diff --git a/docs/functions/drawables_shapes_circle-factory.CircleFactory.html b/docs/functions/drawables_shapes_circle-factory.CircleFactory.html index dcb5a1e..50d68cc 100644 --- a/docs/functions/drawables_shapes_circle-factory.CircleFactory.html +++ b/docs/functions/drawables_shapes_circle-factory.CircleFactory.html @@ -1 +1 @@ -CircleFactory | SDF-2D - v0.7.6
SDF-2D - v0.7.6
    Preparing search index...
    • Parameters

      • color:
            | number
            | IndexedCollection
            | [number, number, number]
            | [number, number, number, number]

      Returns typeof CircleBase

    +CircleFactory | SDF-2D - v0.7.6
    SDF-2D - v0.7.6
      Preparing search index...
      • Parameters

        • color:
              | number
              | IndexedCollection
              | [number, number, number]
              | [number, number, number, number]

        Returns typeof CircleBase

      diff --git a/docs/functions/graphics_rendering_renderer_noise-renderer.renderNoise.html b/docs/functions/graphics_rendering_renderer_noise-renderer.renderNoise.html index 6119e73..ca353f5 100644 --- a/docs/functions/graphics_rendering_renderer_noise-renderer.renderNoise.html +++ b/docs/functions/graphics_rendering_renderer_noise-renderer.renderNoise.html @@ -5,4 +5,4 @@ while returning the generated texture in the form of a canvas.

    • scale: number

      A starting value can be 15

    • amplitude: number

      A starting value can be 1

    • ignoreWebGL2: boolean = false

      Ignore WebGL2, even when it's available

      -
    • Returns Promise<HTMLCanvasElement>

      +

      Returns Promise<HTMLCanvasElement>

      diff --git a/docs/functions/run-animation.runAnimation.html b/docs/functions/run-animation.runAnimation.html index 6e40b5e..9181d16 100644 --- a/docs/functions/run-animation.runAnimation.html +++ b/docs/functions/run-animation.runAnimation.html @@ -1,4 +1,4 @@ -runAnimation | SDF-2D - v0.7.6
      SDF-2D - v0.7.6
        Preparing search index...

        Function runAnimation

        • Implements the boilerplate code required to run real-time animations +runAnimation | SDF-2D - v0.7.6

          SDF-2D - v0.7.6
            Preparing search index...

            Function runAnimation

            • Implements the boilerplate code required to run real-time animations in the browser. An FPS based autoscaler is also used. This creates an additional fps key in the renderers insights property.

              Example usage:

              @@ -18,4 +18,4 @@ ever needs to be drawn by this renderer has to be given before compiling.

              renderDrawables must not be called by the animate function. It should return true if the animation should be continued. To break out of the animation loop, a false (falsy) return value must be given.

              -
            • settings: Partial<StartupSettings & RuntimeSettings> = {}

            Returns Promise<void>

          +
        • settings: Partial<StartupSettings & RuntimeSettings> & { enableAutoscaler?: boolean } = {}
        • Returns Promise<void>

          diff --git a/docs/index.html b/docs/index.html index 8c5d546..053d452 100644 --- a/docs/index.html +++ b/docs/index.html @@ -10,44 +10,44 @@ -

          If you're planning on creating animated content, use the runAnimation function to spare yourself from writing boilerplate code. -Further documentation on its usage is available in its documentation.

          +

          If you're planning to create animated content, use the runAnimation function to save yourself from writing boilerplate code. +See its documentation for more details.

          -

          Iñigo Quilez has some great 2D SDF-s

          +

          Iñigo Quilez has a great collection of 2D SDFs

          -

          The vec2, vec3, and vec4 types seen in the documentation come from the glMatrix library and are equivalent to regular JS Arrays or Float32Arrays. So, feel free to give [x, y] as an input for functions requiring vec2.

          +

          The vec2, vec3, and vec4 types seen in the documentation come from the glMatrix library and are equivalent to regular JS Arrays or Float32Arrays, so feel free to pass [x, y] to functions that expect a vec2.

          -

          Anywhere, where positions need to be specified, the y values grow upwards. That means, when setting the view area, the origin is at the bottom left corner of the display.

          +

          Wherever positions need to be specified, the y axis grows upwards. This means that when you set the view area, the origin is at the bottom-left corner of the display.

          -

          For optimising the evaluation of the distance field, the display is divided up into a grid of tiles. The shaders for each tile are compiled to support a fix maximum number of objects on it. When using the built-in drawables it is possible that after a certain number of on-screen objects new ones won't be visible.

          -

          Mitigating this issue is quite easy. Instead of the following code:

          +

          To optimise the evaluation of the distance field, the display is divided into a grid of tiles. The shaders for each tile are compiled to support a fixed maximum number of objects. When using the built-in drawables, this means that beyond a certain number of on-screen objects, new ones may stop appearing.

          +

          Mitigating this is easy. Instead of the following code:

          this.renderer = await compile(canvas, [Circle.descriptor, CircleLight.descriptor]);
           
          -

          Modify it to something similar:

          +

          modify it to something like this:

          this.renderer = await compile(canvas, [
          {
          ...Circle.descriptor,
          shaderCombinationSteps: [0, 1, 2, 24, 64],
          },
          {
          ...CircleLight.descriptor,
          shaderCombinationSteps: [0, 1, 2, 4],
          },
          ]);
          -

          The usage of too large numbers is not advised for compatibility and performance reasons alike.

          +

          Using very large numbers is not advised, for both compatibility and performance reasons.

          -

          Steps are very useful for tile-based rendering, because it is possible for one tile (at a given moment) to be empty or contain just a few objects, while others have a large cluster of objects. The compiled shaders only take into account the necessary number of objects on each tile.

          +

          Steps are especially useful for tile-based rendering: at any given moment, one tile may be empty or contain just a few objects, while another holds a large cluster. The compiled shaders only account for the number of objects actually present on each tile.

          From 4d94fdeec8dcd156f52ea6337ab8191b0bbf14ce Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Wed, 10 Jun 2026 22:29:40 +0100 Subject: [PATCH 2/4] Ensure all shapes are unique --- src/drawables/shapes/circle-factory.ts | 2 - src/drawables/shapes/droplet-factory.ts | 38 +++++----- src/drawables/shapes/hexagon-factory.ts | 24 ++++--- .../shapes/inverted-tunnel-factory.ts | 71 +++++++++++-------- src/drawables/shapes/noisy-polygon-factory.ts | 44 ++++++------ src/drawables/shapes/polygon-factory.ts | 32 +++++---- .../shapes/rotated-rectangle-factory.ts | 32 +++++---- 7 files changed, 135 insertions(+), 108 deletions(-) diff --git a/src/drawables/shapes/circle-factory.ts b/src/drawables/shapes/circle-factory.ts index ad6c8b1..93b9088 100644 --- a/src/drawables/shapes/circle-factory.ts +++ b/src/drawables/shapes/circle-factory.ts @@ -15,8 +15,6 @@ class CircleBase extends EmptyDrawable { } } -// Suffixing the GLSL names with a per-factory-invocation id lets multiple -// circle types (e.g. different colors) coexist in one compiled shader. let _id = 0; /** diff --git a/src/drawables/shapes/droplet-factory.ts b/src/drawables/shapes/droplet-factory.ts index 1c8c7ad..4b9e76a 100644 --- a/src/drawables/shapes/droplet-factory.ts +++ b/src/drawables/shapes/droplet-factory.ts @@ -19,6 +19,8 @@ class DropletBase extends EmptyDrawable { } } +let _id = 0; + /** * @category Drawable */ @@ -27,28 +29,28 @@ export const DropletFactory = (color: vec3 | vec4 | number): typeof DropletBase public static descriptor: DrawableDescriptor = { sdf: { shader: ` - uniform vec2 froms[DROPLET_COUNT]; - uniform vec2 toFromDeltas[DROPLET_COUNT]; - uniform float fromRadii[DROPLET_COUNT]; - uniform float toRadii[DROPLET_COUNT]; + uniform vec2 dropletFroms${_id}[DROPLET_COUNT${_id}]; + uniform vec2 dropletToFromDeltas${_id}[DROPLET_COUNT${_id}]; + uniform float dropletFromRadii${_id}[DROPLET_COUNT${_id}]; + uniform float dropletToRadii${_id}[DROPLET_COUNT${_id}]; - float dropletMinDistance(vec2 target, out vec4 color) { + float dropletMinDistance${_id}(vec2 target, out vec4 color) { color = ${codeForColorAccess(color)}; float minDistance = 1000.0; - for (int i = 0; i < DROPLET_COUNT; i++) { - vec2 targetFromDelta = target - froms[i]; + for (int i = 0; i < DROPLET_COUNT${_id}; i++) { + vec2 targetFromDelta = target - dropletFroms${_id}[i]; float h = clamp( - dot(targetFromDelta, toFromDeltas[i]) - / max(dot(toFromDeltas[i], toFromDeltas[i]), 0.00000001), + dot(targetFromDelta, dropletToFromDeltas${_id}[i]) + / max(dot(dropletToFromDeltas${_id}[i], dropletToFromDeltas${_id}[i]), 0.00000001), 0.0, 1.0 ); float currentDistance = -mix( - fromRadii[i], toRadii[i], h + dropletFromRadii${_id}[i], dropletToRadii${_id}[i], h ) + distance( - targetFromDelta, toFromDeltas[i] * h + targetFromDelta, dropletToFromDeltas${_id}[i] * h ); minDistance = min(minDistance, currentDistance); @@ -57,15 +59,15 @@ export const DropletFactory = (color: vec3 | vec4 | number): typeof DropletBase return minDistance; } `, - distanceFunctionName: 'dropletMinDistance', + distanceFunctionName: `dropletMinDistance${_id}`, }, propertyUniformMapping: { - from: 'froms', - toFromDelta: 'toFromDeltas', - fromRadius: 'fromRadii', - toRadius: 'toRadii', + from: `dropletFroms${_id}`, + toFromDelta: `dropletToFromDeltas${_id}`, + fromRadius: `dropletFromRadii${_id}`, + toRadius: `dropletToRadii${_id}`, }, - uniformCountMacroName: 'DROPLET_COUNT', + uniformCountMacroName: `DROPLET_COUNT${_id}`, shaderCombinationSteps: [0, 1, 4, 16, 32], empty: new Droplet(vec2.create(), vec2.create(), 0, 0), }; @@ -96,5 +98,7 @@ export const DropletFactory = (color: vec3 | vec4 | number): typeof DropletBase } } + _id++; + return Droplet; }; diff --git a/src/drawables/shapes/hexagon-factory.ts b/src/drawables/shapes/hexagon-factory.ts index 956b896..0c133c4 100644 --- a/src/drawables/shapes/hexagon-factory.ts +++ b/src/drawables/shapes/hexagon-factory.ts @@ -15,6 +15,8 @@ class HexagonBase extends EmptyDrawable { } } +let _id = 0; + /** * @category Drawable */ @@ -23,16 +25,16 @@ export const HexagonFactory = (color: vec3 | vec4 | number): typeof HexagonBase public static descriptor: DrawableDescriptor = { sdf: { shader: ` - uniform vec2 hexagonCenters[HEXAGON_COUNT]; - uniform float hexagonSize[HEXAGON_COUNT]; + uniform vec2 hexagonCenters${_id}[HEXAGON_COUNT${_id}]; + uniform float hexagonSize${_id}[HEXAGON_COUNT${_id}]; - float hexagonMinDistance(vec2 target, out vec4 color) { + float hexagonMinDistance${_id}(vec2 target, out vec4 color) { color = ${codeForColorAccess(color)}; float minDistance = 1000.0; - for (int i = 0; i < HEXAGON_COUNT; i++) { + for (int i = 0; i < HEXAGON_COUNT${_id}; i++) { const vec3 k = vec3(-0.866025404,0.5,0.577350269); - float r = hexagonSize[i]; - vec2 p = abs(target - hexagonCenters[i]); + float r = hexagonSize${_id}[i]; + vec2 p = abs(target - hexagonCenters${_id}[i]); float cosa = 0.8660; float sina = 0.5; p = vec2(cosa * p.x - sina * p.y, sina * p.x + cosa * p.y); @@ -45,13 +47,13 @@ export const HexagonFactory = (color: vec3 | vec4 | number): typeof HexagonBase return minDistance; } `, - distanceFunctionName: 'hexagonMinDistance', + distanceFunctionName: `hexagonMinDistance${_id}`, }, propertyUniformMapping: { - center: 'hexagonCenters', - radius: 'hexagonSize', + center: `hexagonCenters${_id}`, + radius: `hexagonSize${_id}`, }, - uniformCountMacroName: 'HEXAGON_COUNT', + uniformCountMacroName: `HEXAGON_COUNT${_id}`, shaderCombinationSteps: [0, 1, 2, 3, 8, 16], empty: new Hexagon(vec2.create(), 0), }; @@ -68,5 +70,7 @@ export const HexagonFactory = (color: vec3 | vec4 | number): typeof HexagonBase } } + _id++; + return Hexagon; }; diff --git a/src/drawables/shapes/inverted-tunnel-factory.ts b/src/drawables/shapes/inverted-tunnel-factory.ts index 9fe2d01..b95ec8a 100644 --- a/src/drawables/shapes/inverted-tunnel-factory.ts +++ b/src/drawables/shapes/inverted-tunnel-factory.ts @@ -19,6 +19,8 @@ class InvertedTunnelBase extends EmptyDrawable { } } +let _id = 0; + /** * Providing a noise texture is required for this drawable. * @@ -31,10 +33,10 @@ export const InvertedTunnelFactory = ( public static descriptor: DrawableDescriptor = { sdf: { shader: ` - uniform vec2 froms[INVERTED_TUNNEL_COUNT]; - uniform vec2 toFromDeltas[INVERTED_TUNNEL_COUNT]; - uniform float fromRadii[INVERTED_TUNNEL_COUNT]; - uniform float toRadii[INVERTED_TUNNEL_COUNT]; + uniform vec2 invertedTunnelFroms${_id}[INVERTED_TUNNEL_COUNT${_id}]; + uniform vec2 invertedTunnelToFromDeltas${_id}[INVERTED_TUNNEL_COUNT${_id}]; + uniform float invertedTunnelFromRadii${_id}[INVERTED_TUNNEL_COUNT${_id}]; + uniform float invertedTunnelToRadii${_id}[INVERTED_TUNNEL_COUNT${_id}]; // Other drawables share this declaration; the include guard keeps // the combined shader from declaring it twice. @@ -43,39 +45,44 @@ export const InvertedTunnelFactory = ( uniform sampler2D noiseTexture; #endif - #ifdef WEBGL2_IS_AVAILABLE - float invertedTunnelTerrain(float h) { - return texture( - noiseTexture, - vec2(h, 0.5) - )[0] - 0.5; - } - #else - float invertedTunnelTerrain(float h) { - return texture2D( - noiseTexture, - vec2(h, 0.5) - )[0] - 0.5; - } + // Shared between every inverted-tunnel variant; the include guard + // keeps the combined shader from defining it twice. + #ifndef INVERTED_TUNNEL_TERRAIN_DECLARED + #define INVERTED_TUNNEL_TERRAIN_DECLARED + #ifdef WEBGL2_IS_AVAILABLE + float invertedTunnelTerrain(float h) { + return texture( + noiseTexture, + vec2(h, 0.5) + )[0] - 0.5; + } + #else + float invertedTunnelTerrain(float h) { + return texture2D( + noiseTexture, + vec2(h, 0.5) + )[0] - 0.5; + } + #endif #endif - float invertedTunnelMinDistance(vec2 target, out vec4 color) { + float invertedTunnelMinDistance${_id}(vec2 target, out vec4 color) { color = ${codeForColorAccess(color)}; float minDistance = -1000.0; - for (int i = 0; i < INVERTED_TUNNEL_COUNT; i++) { + for (int i = 0; i < INVERTED_TUNNEL_COUNT${_id}; i++) { - vec2 targetFromDelta = target - froms[i]; + vec2 targetFromDelta = target - invertedTunnelFroms${_id}[i]; - float h = dot(targetFromDelta, toFromDeltas[i]) - / max(dot(toFromDeltas[i], toFromDeltas[i]), 0.00000001); + float h = dot(targetFromDelta, invertedTunnelToFromDeltas${_id}[i]) + / max(dot(invertedTunnelToFromDeltas${_id}[i], invertedTunnelToFromDeltas${_id}[i]), 0.00000001); float clampedH = clamp(h, 0.0, 1.0); float currentDistance = -mix( - fromRadii[i], toRadii[i], clampedH + invertedTunnelFromRadii${_id}[i], invertedTunnelToRadii${_id}[i], clampedH ) + distance( - targetFromDelta, toFromDeltas[i] * clampedH + targetFromDelta, invertedTunnelToFromDeltas${_id}[i] * clampedH ) - invertedTunnelTerrain(h) / 12.0; minDistance = max(minDistance, -currentDistance); @@ -85,15 +92,15 @@ export const InvertedTunnelFactory = ( } `, isInverted: true, - distanceFunctionName: 'invertedTunnelMinDistance', + distanceFunctionName: `invertedTunnelMinDistance${_id}`, }, propertyUniformMapping: { - from: 'froms', - toFromDelta: 'toFromDeltas', - fromRadius: 'fromRadii', - toRadius: 'toRadii', + from: `invertedTunnelFroms${_id}`, + toFromDelta: `invertedTunnelToFromDeltas${_id}`, + fromRadius: `invertedTunnelFromRadii${_id}`, + toRadius: `invertedTunnelToRadii${_id}`, }, - uniformCountMacroName: 'INVERTED_TUNNEL_COUNT', + uniformCountMacroName: `INVERTED_TUNNEL_COUNT${_id}`, shaderCombinationSteps: [0, 1, 4, 16, 32], empty: new InvertedTunnel(vec2.create(), vec2.create(), 0, 0), }; @@ -124,5 +131,7 @@ export const InvertedTunnelFactory = ( } } + _id++; + return InvertedTunnel; }; diff --git a/src/drawables/shapes/noisy-polygon-factory.ts b/src/drawables/shapes/noisy-polygon-factory.ts index e021f2a..86de254 100644 --- a/src/drawables/shapes/noisy-polygon-factory.ts +++ b/src/drawables/shapes/noisy-polygon-factory.ts @@ -8,6 +8,8 @@ interface NoisyPolygonBase extends PolygonBase { randomOffset: number; } +let _id = 0; + /** * @category Drawable */ @@ -19,10 +21,10 @@ export const NoisyPolygonFactory = ( public static descriptor: DrawableDescriptor = { sdf: { shader: ` - uniform vec2 noisyPolygon${vertexCount}Vertices[NOISY_POLYGON${vertexCount}_COUNT * ${vertexCount}]; - uniform vec2 noisyPolygon${vertexCount}Centers[NOISY_POLYGON${vertexCount}_COUNT]; - uniform float noisyPolygon${vertexCount}Lengths[NOISY_POLYGON${vertexCount}_COUNT]; - uniform float noisyPolygon${vertexCount}Randoms[NOISY_POLYGON${vertexCount}_COUNT]; + uniform vec2 noisyPolygon${vertexCount}Vertices${_id}[NOISY_POLYGON${vertexCount}_COUNT${_id} * ${vertexCount}]; + uniform vec2 noisyPolygon${vertexCount}Centers${_id}[NOISY_POLYGON${vertexCount}_COUNT${_id}]; + uniform float noisyPolygon${vertexCount}Lengths${_id}[NOISY_POLYGON${vertexCount}_COUNT${_id}]; + uniform float noisyPolygon${vertexCount}Randoms${_id}[NOISY_POLYGON${vertexCount}_COUNT${_id}]; // Other drawables (and other vertex-count variants of this one) // share these declarations; the include guards keep the combined @@ -45,7 +47,7 @@ export const NoisyPolygonFactory = ( #endif #endif - vec2 noisyPolygon${vertexCount}LineDistance(vec2 target, vec2 from, vec2 to) { + vec2 noisyPolygon${vertexCount}LineDistance${_id}(vec2 target, vec2 from, vec2 to) { vec2 targetFromDelta = target - from; vec2 toFromDelta = to - from; float h = clamp( @@ -61,18 +63,18 @@ export const NoisyPolygonFactory = ( ); } - float noisyPolygon${vertexCount}MinDistance(vec2 target, out vec4 color) { + float noisyPolygon${vertexCount}MinDistance${_id}(vec2 target, out vec4 color) { color = ${codeForColorAccess(color)}; float minDistance = 100.0; - for (int j = 0; j < NOISY_POLYGON${vertexCount}_COUNT; j++) { - vec2 startEnd = noisyPolygon${vertexCount}Vertices[j * ${vertexCount}]; + for (int j = 0; j < NOISY_POLYGON${vertexCount}_COUNT${_id}; j++) { + vec2 startEnd = noisyPolygon${vertexCount}Vertices${_id}[j * ${vertexCount}]; vec2 vb = startEnd; - vec2 center = noisyPolygon${vertexCount}Centers[j]; - float l = noisyPolygon${vertexCount}Lengths[j]; - float randomOffset = noisyPolygon${vertexCount}Randoms[j]; + vec2 center = noisyPolygon${vertexCount}Centers${_id}[j]; + float l = noisyPolygon${vertexCount}Lengths${_id}[j]; + float randomOffset = noisyPolygon${vertexCount}Randoms${_id}[j]; vec2 targetCenterDelta = target - center; float targetDistance = length(targetCenterDelta); vec2 targetTangent = targetCenterDelta / clamp(targetDistance, 0.01, 1000.0); @@ -88,8 +90,8 @@ export const NoisyPolygonFactory = ( float s = 1.0; for (int k = 1; k < ${vertexCount}; k++) { vec2 va = vb; - vb = noisyPolygon${vertexCount}Vertices[j * ${vertexCount} + k]; - vec2 ds = noisyPolygon${vertexCount}LineDistance(noisyTarget, va, vb); + vb = noisyPolygon${vertexCount}Vertices${_id}[j * ${vertexCount} + k]; + vec2 ds = noisyPolygon${vertexCount}LineDistance${_id}(noisyTarget, va, vb); bvec3 cond = bvec3(noisyTarget.y >= va.y, noisyTarget.y < vb.y, ds.y > 0.0); if (all(cond) || all(not(cond))) { @@ -99,7 +101,7 @@ export const NoisyPolygonFactory = ( d = min(d, ds.x); } - vec2 ds = noisyPolygon${vertexCount}LineDistance(noisyTarget, vb, startEnd); + vec2 ds = noisyPolygon${vertexCount}LineDistance${_id}(noisyTarget, vb, startEnd); bvec3 cond = bvec3(noisyTarget.y >= vb.y, noisyTarget.y < startEnd.y, ds.y > 0.0); if (all(cond) || all(not(cond))) { s *= -1.0; @@ -112,15 +114,15 @@ export const NoisyPolygonFactory = ( return minDistance; } `, - distanceFunctionName: `noisyPolygon${vertexCount}MinDistance`, + distanceFunctionName: `noisyPolygon${vertexCount}MinDistance${_id}`, }, propertyUniformMapping: { - length: `noisyPolygon${vertexCount}Lengths`, - random: `noisyPolygon${vertexCount}Randoms`, - center: `noisyPolygon${vertexCount}Centers`, - vertices: `noisyPolygon${vertexCount}Vertices`, + length: `noisyPolygon${vertexCount}Lengths${_id}`, + random: `noisyPolygon${vertexCount}Randoms${_id}`, + center: `noisyPolygon${vertexCount}Centers${_id}`, + vertices: `noisyPolygon${vertexCount}Vertices${_id}`, }, - uniformCountMacroName: `NOISY_POLYGON${vertexCount}_COUNT`, + uniformCountMacroName: `NOISY_POLYGON${vertexCount}_COUNT${_id}`, shaderCombinationSteps: [0, 1, 2, 3, 8, 16], empty: new NoisyPolygon( new Array(vertexCount).fill(vec2.create()) @@ -183,5 +185,7 @@ export const NoisyPolygonFactory = ( } } + _id++; + return NoisyPolygon as any; }; diff --git a/src/drawables/shapes/polygon-factory.ts b/src/drawables/shapes/polygon-factory.ts index 375d9a6..b43056f 100644 --- a/src/drawables/shapes/polygon-factory.ts +++ b/src/drawables/shapes/polygon-factory.ts @@ -14,6 +14,8 @@ export class PolygonBase extends EmptyDrawable { } } +let _id = 0; + /** * @category Drawable */ @@ -25,9 +27,9 @@ export const PolygonFactory = ( public static descriptor: DrawableDescriptor = { sdf: { shader: ` - uniform vec2 polygon${vertexCount}Vertices[POLYGON${vertexCount}_COUNT * ${vertexCount}]; + uniform vec2 polygon${vertexCount}Vertices${_id}[POLYGON${vertexCount}_COUNT${_id} * ${vertexCount}]; - vec2 polygon${vertexCount}LineDistance(vec2 target, vec2 from, vec2 to) { + vec2 polygon${vertexCount}LineDistance${_id}(vec2 target, vec2 from, vec2 to) { vec2 targetFromDelta = target - from; vec2 toFromDelta = to - from; float h = clamp( @@ -43,21 +45,21 @@ export const PolygonFactory = ( ); } - float polygon${vertexCount}MinDistance(vec2 target, out vec4 color) { + float polygon${vertexCount}MinDistance${_id}(vec2 target, out vec4 color) { color = ${codeForColorAccess(color)}; float minDistance = 100.0; - for (int j = 0; j < POLYGON${vertexCount}_COUNT; j++) { - vec2 startEnd = polygon${vertexCount}Vertices[j * ${vertexCount}]; + for (int j = 0; j < POLYGON${vertexCount}_COUNT${_id}; j++) { + vec2 startEnd = polygon${vertexCount}Vertices${_id}[j * ${vertexCount}]; vec2 vb = startEnd; float d = 10000.0; float s = 1.0; for (int k = 1; k < ${vertexCount}; k++) { vec2 va = vb; - vb = polygon${vertexCount}Vertices[j * ${vertexCount} + k]; - vec2 ds = polygon${vertexCount}LineDistance(target, va, vb); + vb = polygon${vertexCount}Vertices${_id}[j * ${vertexCount} + k]; + vec2 ds = polygon${vertexCount}LineDistance${_id}(target, va, vb); bvec3 cond = bvec3(target.y >= va.y, target.y < vb.y, ds.y > 0.0); if (all(cond) || all(not(cond))) { @@ -67,7 +69,7 @@ export const PolygonFactory = ( d = min(d, ds.x); } - vec2 ds = polygon${vertexCount}LineDistance(target, vb, startEnd); + vec2 ds = polygon${vertexCount}LineDistance${_id}(target, vb, startEnd); bvec3 cond = bvec3(target.y >= vb.y, target.y < startEnd.y, ds.y > 0.0); if (all(cond) || all(not(cond))) { s *= -1.0; @@ -80,13 +82,13 @@ export const PolygonFactory = ( return minDistance; } `, - distanceFunctionName: `polygon${vertexCount}MinDistance`, + distanceFunctionName: `polygon${vertexCount}MinDistance${_id}`, }, propertyUniformMapping: { - vertices: `polygon${vertexCount}Vertices`, + vertices: `polygon${vertexCount}Vertices${_id}`, }, objectCountScaler: 1 / vertexCount, - uniformCountMacroName: `POLYGON${vertexCount}_COUNT`, + uniformCountMacroName: `POLYGON${vertexCount}_COUNT${_id}`, shaderCombinationSteps: [0, 1, 2, 3, 8, 16], empty: new Polygon(new Array(vertexCount).fill(vec2.create())), }; @@ -146,9 +148,9 @@ export const PolygonFactory = ( private get actualVertices(): Array { return this.vertices.length < vertexCount ? ([ - ...this.vertices, - ...new Array(vertexCount - this.vertices.length).fill(this.vertices[0]), - ] as Array) + ...this.vertices, + ...new Array(vertexCount - this.vertices.length).fill(this.vertices[0]), + ] as Array) : this.vertices; } @@ -178,5 +180,7 @@ export const PolygonFactory = ( } } + _id++; + return Polygon; }; diff --git a/src/drawables/shapes/rotated-rectangle-factory.ts b/src/drawables/shapes/rotated-rectangle-factory.ts index 83e0506..1c65824 100644 --- a/src/drawables/shapes/rotated-rectangle-factory.ts +++ b/src/drawables/shapes/rotated-rectangle-factory.ts @@ -16,6 +16,8 @@ class RotatedRectangleBase extends EmptyDrawable { } } +let _id = 0; + /** * @category Drawable */ @@ -27,23 +29,23 @@ export const RotatedRectangleFactory = ( sdf: { // Source: https://iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm shader: ` - uniform vec2 rotatedRectangleTopCenters[ROTATED_RECTANGLE_COUNT]; - uniform vec2 rotatedRectangleBottomCenters[ROTATED_RECTANGLE_COUNT]; - uniform float rotatedRectangleWidths[ROTATED_RECTANGLE_COUNT]; + uniform vec2 rotatedRectangleTopCenters${_id}[ROTATED_RECTANGLE_COUNT${_id}]; + uniform vec2 rotatedRectangleBottomCenters${_id}[ROTATED_RECTANGLE_COUNT${_id}]; + uniform float rotatedRectangleWidths${_id}[ROTATED_RECTANGLE_COUNT${_id}]; - float rotatedRectangleMinDistance(vec2 target, out vec4 color) { + float rotatedRectangleMinDistance${_id}(vec2 target, out vec4 color) { color = ${codeForColorAccess(color)}; float minDistance = 1000.0; - for (int i = 0; i < ROTATED_RECTANGLE_COUNT; i++) { - vec2 top = rotatedRectangleTopCenters[i]; - vec2 bottom = rotatedRectangleBottomCenters[i]; + for (int i = 0; i < ROTATED_RECTANGLE_COUNT${_id}; i++) { + vec2 top = rotatedRectangleTopCenters${_id}[i]; + vec2 bottom = rotatedRectangleBottomCenters${_id}[i]; float height = length(bottom - top); vec2 d = height > 0.00000001 ? (bottom - top) / height : vec2(0.0, 1.0); vec2 q = (target - (top + bottom) * 0.5); q = mat2(d.x, -d.y, d.y, d.x) * q; - q = abs(q) - vec2(height, rotatedRectangleWidths[i]) * 0.5; + q = abs(q) - vec2(height, rotatedRectangleWidths${_id}[i]) * 0.5; float dist = length(max(q, 0.0)) + min(max(q.x, q.y), 0.0); minDistance = min(minDistance, dist); } @@ -51,20 +53,20 @@ export const RotatedRectangleFactory = ( return minDistance; } `, - distanceFunctionName: 'rotatedRectangleMinDistance', + distanceFunctionName: `rotatedRectangleMinDistance${_id}`, }, propertyUniformMapping: { - topCenter: 'rotatedRectangleTopCenters', - bottomCenter: 'rotatedRectangleBottomCenters', - width: 'rotatedRectangleWidths', + topCenter: `rotatedRectangleTopCenters${_id}`, + bottomCenter: `rotatedRectangleBottomCenters${_id}`, + width: `rotatedRectangleWidths${_id}`, }, - uniformCountMacroName: 'ROTATED_RECTANGLE_COUNT', + uniformCountMacroName: `ROTATED_RECTANGLE_COUNT${_id}`, shaderCombinationSteps: [0, 1, 2, 3, 8, 16], empty: new RotatedRectangle(vec2.create(), vec2.create(), 0), }; /** - * It is just an estimate by calculating a bounding circle + * This is only an estimate, computed from a bounding circle. * @param target */ public minDistance(target: vec2): number { @@ -91,5 +93,7 @@ export const RotatedRectangleFactory = ( } } + _id++; + return RotatedRectangle; }; From fb40343c408b8081ea1de9db5f425b63b283702f Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Wed, 10 Jun 2026 22:29:50 +0100 Subject: [PATCH 3/4] Improve docs language --- src/compile.ts | 8 +++--- src/drawables/drawable-descriptor.ts | 10 +++---- src/drawables/drawable.ts | 4 +-- .../texture/texture-options.ts | 4 +-- .../rendering/fps-quality-autoscaler.ts | 5 ++-- .../rendering/renderer/noise-renderer.ts | 9 +++---- src/graphics/rendering/renderer/renderer.ts | 8 +++--- .../rendering/settings/runtime-settings.ts | 26 +++++++++---------- .../rendering/settings/startup-settings.ts | 6 ++--- src/helper/delta-time-calculator.ts | 4 +-- src/run-animation.ts | 6 ++--- 11 files changed, 45 insertions(+), 45 deletions(-) diff --git a/src/compile.ts b/src/compile.ts index 72b8bd5..37f296c 100644 --- a/src/compile.ts +++ b/src/compile.ts @@ -4,12 +4,12 @@ import { StartupSettings } from './graphics/rendering/settings/startup-settings' import { DrawableDescriptor, Renderer } from './main'; /** - * Compiles a new renderer instance. There can multiple renderers on a single page. + * Compiles a new renderer instance. There can be multiple renderers on a single page. * > Asynchronous behaviour is required for parallel shader compiling. - * > Trying to draw before the returned promise resolves, results in no action taken. - * > Settings can be set before promise resolution and they will be applied later. + * > Trying to draw before the returned promise resolves results in no action being taken. + * > Settings can be set before the promise resolves and they will be applied later. * - * The descriptors of every to-be-drawn objects are required before creating the renderer, + * The descriptors of all to-be-drawn objects are required before creating the renderer, * allowing the compiler to only create the shaders that will actually be used. * * Example usage: diff --git a/src/drawables/drawable-descriptor.ts b/src/drawables/drawable-descriptor.ts index 4ebcd8a..1f98519 100644 --- a/src/drawables/drawable-descriptor.ts +++ b/src/drawables/drawable-descriptor.ts @@ -6,7 +6,7 @@ import { Drawable } from './drawable'; * * Each [[Drawable]] must have a static property of this type, called descriptor. * - * For more information on how to create your own DrawableDescriptor-s, look at the + * For more information on how to create your own DrawableDescriptors, look at the * code of [[CircleFactory]] or [[InvertedTunnelFactory]]. */ export interface DrawableDescriptor { @@ -27,9 +27,9 @@ export interface DrawableDescriptor { */ sdf?: { /** - * The actual GLSL code for observing the drawables represented by this descriptor. + * The actual GLSL code that defines the drawables represented by this descriptor. * - * Your code should work with both version 100 and version 300 es + * Your code should work with both GLSL version 100 and version 300 es. */ shader: string; /** @@ -59,8 +59,8 @@ export interface DrawableDescriptor { /** * Number of possible drawables around each tile. * - * For each step, a shader will be generated. And at runtime the closes matching - * shader will be used to render a given part of the scene. + * For each step, a shader is generated, and at runtime the closest matching + * shader is used to render a given part of the scene. * * Must contain 0 as a value. */ diff --git a/src/drawables/drawable.ts b/src/drawables/drawable.ts index 137c4fb..0ed22fb 100644 --- a/src/drawables/drawable.ts +++ b/src/drawables/drawable.ts @@ -17,8 +17,8 @@ export abstract class Drawable { /** * The lower bound of the distance between the target and the object. * - * It can return 0 by default, the only consequence of this, is a reduced performance. - * Because this object won't benefit from tile-based rendering. + * It can return 0 by default; the only consequence is reduced performance, + * because this object won't benefit from tile-based rendering. * @param target */ public abstract minDistance(target: vec2): number; diff --git a/src/graphics/graphics-library/texture/texture-options.ts b/src/graphics/graphics-library/texture/texture-options.ts index 0b8d62f..827aff3 100644 --- a/src/graphics/graphics-library/texture/texture-options.ts +++ b/src/graphics/graphics-library/texture/texture-options.ts @@ -2,12 +2,12 @@ export enum WrapOptions { CLAMP_TO_EDGE = 'CLAMP_TO_EDGE', /** - * On WebGL it only work with power of 2 texture sizes. + * On WebGL, this only works with power-of-2 texture sizes. */ REPEAT = 'REPEAT', /** - * On WebGL it only work with power of 2 texture sizes. + * On WebGL, this only works with power-of-2 texture sizes. */ MIRRORED_REPEAT = 'MIRRORED_REPEAT', } diff --git a/src/graphics/rendering/fps-quality-autoscaler.ts b/src/graphics/rendering/fps-quality-autoscaler.ts index 56f16aa..5889bb0 100644 --- a/src/graphics/rendering/fps-quality-autoscaler.ts +++ b/src/graphics/rendering/fps-quality-autoscaler.ts @@ -6,7 +6,7 @@ import { RuntimeSettings } from './settings/runtime-settings'; /** * Set the quality of rendering based on FPS values. * - * When using this the size of the canvas must be fixed with CSS. + * When using this, the size of the canvas must be fixed with CSS. * * The `addDeltaTime` method should be called once every frame. * @@ -52,7 +52,8 @@ export class FpsQualityAutoscaler { private deltaTimeSinceLastAdjustment = 0; /** - * Autoscaling is also done by calling this function + * Record the time taken by the latest frame. Autoscaling is also performed + * as part of this call. * @param deltaTimeInMilliseconds */ public addDeltaTime(deltaTimeInMilliseconds: DOMHighResTimeStamp) { diff --git a/src/graphics/rendering/renderer/noise-renderer.ts b/src/graphics/rendering/renderer/noise-renderer.ts index e1f8a6c..0eac994 100644 --- a/src/graphics/rendering/renderer/noise-renderer.ts +++ b/src/graphics/rendering/renderer/noise-renderer.ts @@ -10,13 +10,12 @@ import randomVertex100 from '../shaders/random-vs-100.glsl'; import randomVertex from '../shaders/random-vs.glsl'; /** - * Create a renderer, draw a 2D noise texture with it, - * then destroy the used resources, - * while returning the generated texture in the form of a canvas. + * Create a renderer, draw a 2D noise texture with it, then destroy the + * resources it used, returning the generated texture in the form of a canvas. * * @param textureSize The resolution of the end result - * @param scale A starting value can be 15 - * @param amplitude A starting value can be 1 + * @param scale A good starting value is 15 + * @param amplitude A good starting value is 1 * @param ignoreWebGL2 Ignore WebGL2, even when it's available */ export const renderNoise = async ( diff --git a/src/graphics/rendering/renderer/renderer.ts b/src/graphics/rendering/renderer/renderer.ts index 2e834a4..f3a4c0b 100644 --- a/src/graphics/rendering/renderer/renderer.ts +++ b/src/graphics/rendering/renderer/renderer.ts @@ -12,7 +12,7 @@ export interface Renderer { /** * Get the actual resolution of the canvas without triggering a reflow. * - * A ResizeObserver is utilised fot achieving this. + * A ResizeObserver is used to achieve this. */ readonly canvasSize: ReadonlyVec2; @@ -26,7 +26,7 @@ export interface Renderer { /** * Set the camera transformation. * - * @param topLeft top (!) left. By default, equals to [0, canvasHeight]. + * @param topLeft top (!) left. By default, equal to [0, canvasHeight]. * @param size need not be equal to the canvas size, though their aspect ratio * should be the same to avoid stretching. */ @@ -89,9 +89,9 @@ export interface Renderer { /** * Get useful information about the hardware and the SDF2D renderer. * - * Its scheme is subject to change. + * Its schema is subject to change. * - * During context lost it might be null. + * During a context-lost event, it might be null. */ readonly insights: RendererInfo | null; } diff --git a/src/graphics/rendering/settings/runtime-settings.ts b/src/graphics/rendering/settings/runtime-settings.ts index 14212fd..5fc24c9 100644 --- a/src/graphics/rendering/settings/runtime-settings.ts +++ b/src/graphics/rendering/settings/runtime-settings.ts @@ -9,16 +9,16 @@ import { TextureWithOptions } from '../../graphics-library/texture/texture-optio */ export interface RuntimeSettings { /** - * When set to `true` rendering will be done on the screen's real resolution. + * When set to `true`, rendering will be done at the screen's real resolution. */ enableHighDpiRendering: boolean; /** * First, the SDF of the scene is evaluated at every single pixel. - * For speeding this process up, the screen is divided up into tiles, - * this way each having to deal with a fewer objects. + * To speed this process up, the screen is divided into tiles, + * so each one has to deal with fewer objects. * - * For each tile, it is decided which objects are near its close vicinity. + * For each tile, it is decided which objects are in its vicinity. * This comes with some overhead for the CPU, while saving the GPU from loads of * calculations. The workload can be balanced between the CPU and the GPU by setting * this number. @@ -27,24 +27,24 @@ export interface RuntimeSettings { /** * By default, every pixel is outside of objects. Flipping this value to `true` will - * result in every pixel being inside a large object. From then it only makes sense to + * result in every pixel being inside a large object. From then on, it only makes sense to * draw inverted objects. */ isWorldInverted: boolean; /** - * When lights reach the end of the display, they are slowly faded out. The length - * of this phaseout can be set through this value. + * When lights reach the edge of the display, they are slowly faded out. The length + * of this fade-out can be set through this value. */ lightCutoffDistance: number; /** - * Its length should be less than the one specified in [[StartupSettings]].paletteSize. - * * The possible colors for the objects. Each color is referenced by its index in the * palette. * - * Can have transparency, but only if WebGL2 support is enabled. + * Its length should be less than the `paletteSize` specified in [[StartupSettings]]. + * + * Colors can have transparency, but only if WebGL2 support is enabled. */ colorPalette: Array; @@ -76,10 +76,10 @@ export interface RuntimeSettings { /** * It is possible to use your own textures in your SDF definitions. * - * The keys of the object should be the name used to reference them in the GLSL code, - * and the values should be the textures themselves or a TextureWithOptions specifying + * The keys of the object should be the names used to reference them in the GLSL code, + * and the values should be the textures themselves, or a TextureWithOptions specifying * the texture's [[TextureOptions]]. - * It can be a canvas, img element, Image and so on. + * A texture can be a canvas, an img element, an Image, and so on. */ textures: { [textureName: string]: TexImageSource | TextureWithOptions; diff --git a/src/graphics/rendering/settings/startup-settings.ts b/src/graphics/rendering/settings/startup-settings.ts index 6447fbb..de99a7d 100644 --- a/src/graphics/rendering/settings/startup-settings.ts +++ b/src/graphics/rendering/settings/startup-settings.ts @@ -11,7 +11,7 @@ export interface StartupSettings { * Creates a stopwatch used for measuring the GPU render time * when its required extension is available. * - * You should only have one renderer with enabled stopwatch. + * You should only have one renderer with the stopwatch enabled. */ enableStopwatch: boolean; @@ -20,7 +20,7 @@ export interface StartupSettings { * Sensible values for this are between 8 and 32. * * The higher the number, the harder the shadows will get. - * Some ambient occlusion like effects can be visible on lower trace counts. + * Some ambient-occlusion-like effects can be visible at lower trace counts. */ shadowTraceCount: number; @@ -55,7 +55,7 @@ export interface StartupSettings { paletteSize: number; /** - * Many context lost event will be simulated when enabled. + * Many context-lost events will be simulated when enabled. * * Useful for testing. */ diff --git a/src/helper/delta-time-calculator.ts b/src/helper/delta-time-calculator.ts index 87fd4c3..08a4074 100644 --- a/src/helper/delta-time-calculator.ts +++ b/src/helper/delta-time-calculator.ts @@ -1,8 +1,8 @@ /** * A helper class for calculating the elapsed time between frames. * - * Handles the case, where the browser tab is not in focus and `requestAnimationFrame` - * does not get called for performance reasons. In this case, the return deltaTime won't be + * Handles the case where the browser tab is not in focus and `requestAnimationFrame` + * does not get called for performance reasons. In this case, the returned deltaTime won't be * an unreasonably large value. */ export class DeltaTimeCalculator { diff --git a/src/run-animation.ts b/src/run-animation.ts index f426438..a09f730 100644 --- a/src/run-animation.ts +++ b/src/run-animation.ts @@ -8,8 +8,8 @@ import { DrawableDescriptor, Renderer } from './main'; /** * Implements the boilerplate code required to run real-time animations - * in the browser. An FPS based autoscaler is also used. This creates an additional `fps` - * key in the renderers `insights` property. + * in the browser. An FPS-based autoscaler is also used. This creates an additional `fps` + * key in the renderer's `insights` property. * * Example usage: * @@ -17,7 +17,7 @@ import { DrawableDescriptor, Renderer } from './main'; * * ``` * > The canvas needs to have a fixed size specified by CSS. - + * * ```js * import { CircleFactory, CircleLight, hsl, runAnimation } from 'sdf-2d'; * From 94206f299e3a546fc80df29ea9c75971a935cd10 Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Wed, 10 Jun 2026 22:31:01 +0100 Subject: [PATCH 4/4] Render docs --- docs/classes/drawables_drawable.Drawable.html | 4 +-- ...ables_lights_circle-light.CircleLight.html | 4 +-- ...rawables_lights_flashlight.Flashlight.html | 4 +-- ...shapes_colorful-circle.ColorfulCircle.html | 4 +-- ...es_shapes_polygon-factory.PolygonBase.html | 4 +-- ...ality-autoscaler.FpsQualityAutoscaler.html | 7 ++--- ...a-time-calculator.DeltaTimeCalculator.html | 4 +-- ...y_texture_texture-options.WrapOptions.html | 4 +-- docs/functions/compile.compile.html | 8 +++--- ...s_shapes_circle-factory.CircleFactory.html | 2 +- ...shapes_droplet-factory.DropletFactory.html | 2 +- ...shapes_hexagon-factory.HexagonFactory.html | 2 +- ...-tunnel-factory.InvertedTunnelFactory.html | 2 +- ...y-polygon-factory.NoisyPolygonFactory.html | 2 +- ...shapes_polygon-factory.PolygonFactory.html | 2 +- ...angle-factory.RotatedRectangleFactory.html | 2 +- ...g_renderer_noise-renderer.renderNoise.html | 11 ++++---- .../functions/run-animation.runAnimation.html | 4 +-- ...rawable-descriptor.DrawableDescriptor.html | 10 +++---- ..._rendering_renderer_renderer.Renderer.html | 8 +++--- ...ings_runtime-settings.RuntimeSettings.html | 26 +++++++++---------- ...ings_startup-settings.StartupSettings.html | 6 ++--- 22 files changed, 61 insertions(+), 61 deletions(-) diff --git a/docs/classes/drawables_drawable.Drawable.html b/docs/classes/drawables_drawable.Drawable.html index c82caf3..165de8b 100644 --- a/docs/classes/drawables_drawable.Drawable.html +++ b/docs/classes/drawables_drawable.Drawable.html @@ -14,6 +14,6 @@ before being returned.

        • transform1d: number

          scalar properties should be transformed by this number before being returned.

        • Returns any

          • The lower bound of the distance between the target and the object.

            -

            It can return 0 by default, the only consequence of this, is a reduced performance. -Because this object won't benefit from tile-based rendering.

            +

            It can return 0 by default; the only consequence is reduced performance, +because this object won't benefit from tile-based rendering.

            Parameters

            • target: vec2

            Returns number

          diff --git a/docs/classes/drawables_lights_circle-light.CircleLight.html b/docs/classes/drawables_lights_circle-light.CircleLight.html index 8f13c11..6a64187 100644 --- a/docs/classes/drawables_lights_circle-light.CircleLight.html +++ b/docs/classes/drawables_lights_circle-light.CircleLight.html @@ -14,6 +14,6 @@ before being returned.

        • transform1d: number

          scalar properties should be transformed by this number before being returned.

        • Returns any

          • The lower bound of the distance between the target and the object.

            -

            It can return 0 by default, the only consequence of this, is a reduced performance. -Because this object won't benefit from tile-based rendering.

            +

            It can return 0 by default; the only consequence is reduced performance, +because this object won't benefit from tile-based rendering.

            Parameters

            • target: vec2

            Returns number

          • Parameters

            • ratio: number

            Returns void

          diff --git a/docs/classes/drawables_lights_flashlight.Flashlight.html b/docs/classes/drawables_lights_flashlight.Flashlight.html index 98d3388..8c0f3a3 100644 --- a/docs/classes/drawables_lights_flashlight.Flashlight.html +++ b/docs/classes/drawables_lights_flashlight.Flashlight.html @@ -11,6 +11,6 @@ setLightnessRatio

          Constructors

          • Parameters

            • center: vec2
            • color: vec3
            • intensity: number
            • direction: vec2
            • startCutoff: number = 0

            Returns Flashlight

          Properties

          center: vec2
          color: vec3
          direction: vec2
          intensity: number
          lightnessRatio: number = 1
          startCutoff: number = 0
          descriptor: DrawableDescriptor = ...

          This should be defined in inherited classes.

          Methods

          • Parameters

            • transform2d: mat2d
            • transform1d: number

            Returns any

          • The lower bound of the distance between the target and the object.

            -

            It can return 0 by default, the only consequence of this, is a reduced performance. -Because this object won't benefit from tile-based rendering.

            +

            It can return 0 by default; the only consequence is reduced performance, +because this object won't benefit from tile-based rendering.

            Parameters

            • target: vec2

            Returns number

          • Parameters

            • ratio: number

            Returns void

          diff --git a/docs/classes/drawables_shapes_colorful-circle.ColorfulCircle.html b/docs/classes/drawables_shapes_colorful-circle.ColorfulCircle.html index 5e1741e..d5ff00b 100644 --- a/docs/classes/drawables_shapes_colorful-circle.ColorfulCircle.html +++ b/docs/classes/drawables_shapes_colorful-circle.ColorfulCircle.html @@ -17,6 +17,6 @@ before being returned.

        • transform1d: number

          scalar properties should be transformed by this number before being returned.

        • Returns any

          • The lower bound of the distance between the target and the object.

            -

            It can return 0 by default, the only consequence of this, is a reduced performance. -Because this object won't benefit from tile-based rendering.

            +

            It can return 0 by default; the only consequence is reduced performance, +because this object won't benefit from tile-based rendering.

            Parameters

            • target: vec2

            Returns number

          diff --git a/docs/classes/drawables_shapes_polygon-factory.PolygonBase.html b/docs/classes/drawables_shapes_polygon-factory.PolygonBase.html index 6937f5e..b02025e 100644 --- a/docs/classes/drawables_shapes_polygon-factory.PolygonBase.html +++ b/docs/classes/drawables_shapes_polygon-factory.PolygonBase.html @@ -10,6 +10,6 @@ before being returned.

        • transform1d: number

          scalar properties should be transformed by this number before being returned.

        • Returns any

          • The lower bound of the distance between the target and the object.

            -

            It can return 0 by default, the only consequence of this, is a reduced performance. -Because this object won't benefit from tile-based rendering.

            +

            It can return 0 by default; the only consequence is reduced performance, +because this object won't benefit from tile-based rendering.

            Parameters

            • target: vec2

            Returns number

          diff --git a/docs/classes/graphics_rendering_fps-quality-autoscaler.FpsQualityAutoscaler.html b/docs/classes/graphics_rendering_fps-quality-autoscaler.FpsQualityAutoscaler.html index 41d2646..fce86c1 100644 --- a/docs/classes/graphics_rendering_fps-quality-autoscaler.FpsQualityAutoscaler.html +++ b/docs/classes/graphics_rendering_fps-quality-autoscaler.FpsQualityAutoscaler.html @@ -1,5 +1,5 @@ FpsQualityAutoscaler | SDF-2D - v0.7.6
          SDF-2D - v0.7.6
            Preparing search index...

            Set the quality of rendering based on FPS values.

            -

            When using this the size of the canvas must be fixed with CSS.

            +

            When using this, the size of the canvas must be fixed with CSS.

            The addDeltaTime method should be called once every frame.

            Usage:

             const renderer = await compile(...);
            const autoscaler = new FpsQualityAutoscaler(renderer); @@ -12,5 +12,6 @@

            Accessors

            Methods

            Constructors

            Properties

            fpsHysteresis: number = 5
            scalingEnabled: boolean = true

            When false, FPS is still measured but the render scales are left alone.

            -
            fpsTarget: number = 30

            Accessors

            • get FPS(): number

              Returns number

            Methods

            • Autoscaling is also done by calling this function

              -

              Parameters

              • deltaTimeInMilliseconds: number

              Returns void

            +
            fpsTarget: number = 30

            Accessors

            • get FPS(): number

              Returns number

            Methods

            • Record the time taken by the latest frame. Autoscaling is also performed +as part of this call.

              +

              Parameters

              • deltaTimeInMilliseconds: number

              Returns void

            diff --git a/docs/classes/helper_delta-time-calculator.DeltaTimeCalculator.html b/docs/classes/helper_delta-time-calculator.DeltaTimeCalculator.html index e0146cf..52d307c 100644 --- a/docs/classes/helper_delta-time-calculator.DeltaTimeCalculator.html +++ b/docs/classes/helper_delta-time-calculator.DeltaTimeCalculator.html @@ -1,6 +1,6 @@ DeltaTimeCalculator | SDF-2D - v0.7.6
            SDF-2D - v0.7.6
              Preparing search index...

              A helper class for calculating the elapsed time between frames.

              -

              Handles the case, where the browser tab is not in focus and requestAnimationFrame -does not get called for performance reasons. In this case, the return deltaTime won't be +

              Handles the case where the browser tab is not in focus and requestAnimationFrame +does not get called for performance reasons. In this case, the returned deltaTime won't be an unreasonably large value.

              Index

              Constructors

              Methods

              destroy diff --git a/docs/enums/graphics_graphics-library_texture_texture-options.WrapOptions.html b/docs/enums/graphics_graphics-library_texture_texture-options.WrapOptions.html index 78700b0..22a8f63 100644 --- a/docs/enums/graphics_graphics-library_texture_texture-options.WrapOptions.html +++ b/docs/enums/graphics_graphics-library_texture_texture-options.WrapOptions.html @@ -1,6 +1,6 @@ WrapOptions | SDF-2D - v0.7.6
              SDF-2D - v0.7.6
                Preparing search index...
                Index

                Enumeration Members

                Enumeration Members

                CLAMP_TO_EDGE: "CLAMP_TO_EDGE"
                MIRRORED_REPEAT: "MIRRORED_REPEAT"

                On WebGL it only work with power of 2 texture sizes.

                -
                REPEAT: "REPEAT"

                On WebGL it only work with power of 2 texture sizes.

                +

                Enumeration Members

                CLAMP_TO_EDGE: "CLAMP_TO_EDGE"
                MIRRORED_REPEAT: "MIRRORED_REPEAT"

                On WebGL, this only works with power-of-2 texture sizes.

                +
                REPEAT: "REPEAT"

                On WebGL, this only works with power-of-2 texture sizes.

                diff --git a/docs/functions/compile.compile.html b/docs/functions/compile.compile.html index 544adec..4b5410c 100644 --- a/docs/functions/compile.compile.html +++ b/docs/functions/compile.compile.html @@ -1,10 +1,10 @@ -compile | SDF-2D - v0.7.6
                SDF-2D - v0.7.6
                  Preparing search index...

                  Function compile

                  • Compiles a new renderer instance. There can multiple renderers on a single page.

                    +compile | SDF-2D - v0.7.6
                    SDF-2D - v0.7.6
                      Preparing search index...

                      Function compile

                      • Compiles a new renderer instance. There can be multiple renderers on a single page.

                        Asynchronous behaviour is required for parallel shader compiling. -Trying to draw before the returned promise resolves, results in no action taken. -Settings can be set before promise resolution and they will be applied later.

                        +Trying to draw before the returned promise resolves results in no action being taken. +Settings can be set before the promise resolves and they will be applied later.

                        -

                        The descriptors of every to-be-drawn objects are required before creating the renderer, +

                        The descriptors of all to-be-drawn objects are required before creating the renderer, allowing the compiler to only create the shaders that will actually be used.

                        Example usage:

                         import { compile, hsl, CircleFactory, CircleLight } from 'sdf-2d';

                        const canvas = document.querySelector('canvas');
                        const Circle = CircleFactory(hsl(30, 66, 50));
                        const renderer = await compile(canvas, [Circle.descriptor, CircleLight.descriptor]); diff --git a/docs/functions/drawables_shapes_circle-factory.CircleFactory.html b/docs/functions/drawables_shapes_circle-factory.CircleFactory.html index 50d68cc..c19c376 100644 --- a/docs/functions/drawables_shapes_circle-factory.CircleFactory.html +++ b/docs/functions/drawables_shapes_circle-factory.CircleFactory.html @@ -1 +1 @@ -CircleFactory | SDF-2D - v0.7.6
                        SDF-2D - v0.7.6
                          Preparing search index...
                          • Parameters

                            • color:
                                  | number
                                  | IndexedCollection
                                  | [number, number, number]
                                  | [number, number, number, number]

                            Returns typeof CircleBase

                          +CircleFactory | SDF-2D - v0.7.6
                          SDF-2D - v0.7.6
                            Preparing search index...
                            • Parameters

                              • color:
                                    | number
                                    | IndexedCollection
                                    | [number, number, number]
                                    | [number, number, number, number]

                              Returns typeof CircleBase

                            diff --git a/docs/functions/drawables_shapes_droplet-factory.DropletFactory.html b/docs/functions/drawables_shapes_droplet-factory.DropletFactory.html index 8650a08..1ec97ae 100644 --- a/docs/functions/drawables_shapes_droplet-factory.DropletFactory.html +++ b/docs/functions/drawables_shapes_droplet-factory.DropletFactory.html @@ -1 +1 @@ -DropletFactory | SDF-2D - v0.7.6
                            SDF-2D - v0.7.6
                              Preparing search index...
                              • Parameters

                                • color:
                                      | number
                                      | IndexedCollection
                                      | [number, number, number]
                                      | [number, number, number, number]

                                Returns typeof DropletBase

                              +DropletFactory | SDF-2D - v0.7.6
                              SDF-2D - v0.7.6
                                Preparing search index...
                                • Parameters

                                  • color:
                                        | number
                                        | IndexedCollection
                                        | [number, number, number]
                                        | [number, number, number, number]

                                  Returns typeof DropletBase

                                diff --git a/docs/functions/drawables_shapes_hexagon-factory.HexagonFactory.html b/docs/functions/drawables_shapes_hexagon-factory.HexagonFactory.html index 4114781..09cf762 100644 --- a/docs/functions/drawables_shapes_hexagon-factory.HexagonFactory.html +++ b/docs/functions/drawables_shapes_hexagon-factory.HexagonFactory.html @@ -1 +1 @@ -HexagonFactory | SDF-2D - v0.7.6
                                SDF-2D - v0.7.6
                                  Preparing search index...
                                  • Parameters

                                    • color:
                                          | number
                                          | IndexedCollection
                                          | [number, number, number]
                                          | [number, number, number, number]

                                    Returns typeof HexagonBase

                                  +HexagonFactory | SDF-2D - v0.7.6
                                  SDF-2D - v0.7.6
                                    Preparing search index...
                                    • Parameters

                                      • color:
                                            | number
                                            | IndexedCollection
                                            | [number, number, number]
                                            | [number, number, number, number]

                                      Returns typeof HexagonBase

                                    diff --git a/docs/functions/drawables_shapes_inverted-tunnel-factory.InvertedTunnelFactory.html b/docs/functions/drawables_shapes_inverted-tunnel-factory.InvertedTunnelFactory.html index 20997cf..907535a 100644 --- a/docs/functions/drawables_shapes_inverted-tunnel-factory.InvertedTunnelFactory.html +++ b/docs/functions/drawables_shapes_inverted-tunnel-factory.InvertedTunnelFactory.html @@ -1,2 +1,2 @@ InvertedTunnelFactory | SDF-2D - v0.7.6
                                    SDF-2D - v0.7.6
                                      Preparing search index...
                                      • Providing a noise texture is required for this drawable.

                                        -

                                        Parameters

                                        • color:
                                              | number
                                              | IndexedCollection
                                              | [number, number, number]
                                              | [number, number, number, number]

                                        Returns typeof InvertedTunnelBase

                                      +

                                      Parameters

                                      • color:
                                            | number
                                            | IndexedCollection
                                            | [number, number, number]
                                            | [number, number, number, number]

                                      Returns typeof InvertedTunnelBase

                                    diff --git a/docs/functions/drawables_shapes_noisy-polygon-factory.NoisyPolygonFactory.html b/docs/functions/drawables_shapes_noisy-polygon-factory.NoisyPolygonFactory.html index d435507..cbcb167 100644 --- a/docs/functions/drawables_shapes_noisy-polygon-factory.NoisyPolygonFactory.html +++ b/docs/functions/drawables_shapes_noisy-polygon-factory.NoisyPolygonFactory.html @@ -1 +1 @@ -NoisyPolygonFactory | SDF-2D - v0.7.6
                                    SDF-2D - v0.7.6
                                      Preparing search index...
                                      • Parameters

                                        • vertexCount: number
                                        • color:
                                              | number
                                              | IndexedCollection
                                              | [number, number, number]
                                              | [number, number, number, number]

                                        Returns typeof PolygonBase & NoisyPolygonBase

                                      +NoisyPolygonFactory | SDF-2D - v0.7.6
                                      SDF-2D - v0.7.6
                                        Preparing search index...
                                        • Parameters

                                          • vertexCount: number
                                          • color:
                                                | number
                                                | IndexedCollection
                                                | [number, number, number]
                                                | [number, number, number, number]

                                          Returns typeof PolygonBase & NoisyPolygonBase

                                        diff --git a/docs/functions/drawables_shapes_polygon-factory.PolygonFactory.html b/docs/functions/drawables_shapes_polygon-factory.PolygonFactory.html index 5c4f625..ea0e763 100644 --- a/docs/functions/drawables_shapes_polygon-factory.PolygonFactory.html +++ b/docs/functions/drawables_shapes_polygon-factory.PolygonFactory.html @@ -1 +1 @@ -PolygonFactory | SDF-2D - v0.7.6
                                        SDF-2D - v0.7.6
                                          Preparing search index...
                                          • Parameters

                                            • vertexCount: number
                                            • color:
                                                  | number
                                                  | IndexedCollection
                                                  | [number, number, number]
                                                  | [number, number, number, number]

                                            Returns typeof PolygonBase

                                          +PolygonFactory | SDF-2D - v0.7.6
                                          SDF-2D - v0.7.6
                                            Preparing search index...
                                            • Parameters

                                              • vertexCount: number
                                              • color:
                                                    | number
                                                    | IndexedCollection
                                                    | [number, number, number]
                                                    | [number, number, number, number]

                                              Returns typeof PolygonBase

                                            diff --git a/docs/functions/drawables_shapes_rotated-rectangle-factory.RotatedRectangleFactory.html b/docs/functions/drawables_shapes_rotated-rectangle-factory.RotatedRectangleFactory.html index d8898a2..954eccc 100644 --- a/docs/functions/drawables_shapes_rotated-rectangle-factory.RotatedRectangleFactory.html +++ b/docs/functions/drawables_shapes_rotated-rectangle-factory.RotatedRectangleFactory.html @@ -1 +1 @@ -RotatedRectangleFactory | SDF-2D - v0.7.6
                                            SDF-2D - v0.7.6
                                              Preparing search index...
                                              • Parameters

                                                • color:
                                                      | number
                                                      | IndexedCollection
                                                      | [number, number, number]
                                                      | [number, number, number, number]

                                                Returns typeof RotatedRectangleBase

                                              +RotatedRectangleFactory | SDF-2D - v0.7.6
                                              SDF-2D - v0.7.6
                                                Preparing search index...
                                                • Parameters

                                                  • color:
                                                        | number
                                                        | IndexedCollection
                                                        | [number, number, number]
                                                        | [number, number, number, number]

                                                  Returns typeof RotatedRectangleBase

                                                diff --git a/docs/functions/graphics_rendering_renderer_noise-renderer.renderNoise.html b/docs/functions/graphics_rendering_renderer_noise-renderer.renderNoise.html index ca353f5..544174d 100644 --- a/docs/functions/graphics_rendering_renderer_noise-renderer.renderNoise.html +++ b/docs/functions/graphics_rendering_renderer_noise-renderer.renderNoise.html @@ -1,8 +1,7 @@ -renderNoise | SDF-2D - v0.7.6
                                                SDF-2D - v0.7.6
                                                  Preparing search index...
                                                  • Create a renderer, draw a 2D noise texture with it, -then destroy the used resources, -while returning the generated texture in the form of a canvas.

                                                    +renderNoise | SDF-2D - v0.7.6
                                                    SDF-2D - v0.7.6
                                                      Preparing search index...
                                                      • Create a renderer, draw a 2D noise texture with it, then destroy the +resources it used, returning the generated texture in the form of a canvas.

                                                        Parameters

                                                        • textureSize: ReadonlyVec2

                                                          The resolution of the end result

                                                          -
                                                        • scale: number

                                                          A starting value can be 15

                                                          -
                                                        • amplitude: number

                                                          A starting value can be 1

                                                          +
                                                        • scale: number

                                                          A good starting value is 15

                                                          +
                                                        • amplitude: number

                                                          A good starting value is 1

                                                        • ignoreWebGL2: boolean = false

                                                          Ignore WebGL2, even when it's available

                                                          -

                                                        Returns Promise<HTMLCanvasElement>

                                                      +

                                                    Returns Promise<HTMLCanvasElement>

                                                  diff --git a/docs/functions/run-animation.runAnimation.html b/docs/functions/run-animation.runAnimation.html index 9181d16..dc7d7db 100644 --- a/docs/functions/run-animation.runAnimation.html +++ b/docs/functions/run-animation.runAnimation.html @@ -1,6 +1,6 @@ runAnimation | SDF-2D - v0.7.6
                                                  SDF-2D - v0.7.6
                                                    Preparing search index...

                                                    Function runAnimation

                                                    • Implements the boilerplate code required to run real-time animations -in the browser. An FPS based autoscaler is also used. This creates an additional fps -key in the renderers insights property.

                                                      +in the browser. An FPS-based autoscaler is also used. This creates an additional fps +key in the renderer's insights property.

                                                      Example usage:

                                                        <canvas id="main" style="width: 300px; height: 150px"></canvas>
                                                       
                                                      diff --git a/docs/interfaces/drawables_drawable-descriptor.DrawableDescriptor.html b/docs/interfaces/drawables_drawable-descriptor.DrawableDescriptor.html index 6200b4b..47ca600 100644 --- a/docs/interfaces/drawables_drawable-descriptor.DrawableDescriptor.html +++ b/docs/interfaces/drawables_drawable-descriptor.DrawableDescriptor.html @@ -1,7 +1,7 @@ DrawableDescriptor | SDF-2D - v0.7.6
                                                      SDF-2D - v0.7.6
                                                        Preparing search index...

                                                        Used for containing the required information to compile drawables into shader code.

                                                        Each [[Drawable]] must have a static property of this type, called descriptor.

                                                        -

                                                        For more information on how to create your own DrawableDescriptor-s, look at the +

                                                        For more information on how to create your own DrawableDescriptors, look at the code of [[CircleFactory]] or [[InvertedTunnelFactory]].

                                                        interface DrawableDescriptor {
                                                            empty: Drawable;
                                                            objectCountScaler?: number;
                                                            propertyUniformMapping: { [property: string]: string };
                                                            sdf?: {
                                                                distanceFunctionName: string;
                                                                isInverted?: boolean;
                                                                shader: string;
                                                            };
                                                            shaderCombinationSteps: number[];
                                                            uniformCountMacroName: string;
                                                        }
                                                        Index

                                                        Properties

                                                        empty objectCountScaler? @@ -23,11 +23,11 @@ Its signature should look like this:

                                                      • OptionalisInverted?: boolean

                                                        By default, drawables are not inverted.

                                                        -
                                                      • shader: string

                                                        The actual GLSL code for observing the drawables represented by this descriptor.

                                                        -

                                                        Your code should work with both version 100 and version 300 es

                                                        +
                                                      • shader: string

                                                        The actual GLSL code that defines the drawables represented by this descriptor.

                                                        +

                                                        Your code should work with both GLSL version 100 and version 300 es.

                                                      shaderCombinationSteps: number[]

                                                      Number of possible drawables around each tile.

                                                      -

                                                      For each step, a shader will be generated. And at runtime the closes matching -shader will be used to render a given part of the scene.

                                                      +

                                                      For each step, a shader is generated, and at runtime the closest matching +shader is used to render a given part of the scene.

                                                      Must contain 0 as a value.

                                                      uniformCountMacroName: string

                                                      The name of the uniform int used in the code to refer to the number of drawables of this type.

                                                      diff --git a/docs/interfaces/graphics_rendering_renderer_renderer.Renderer.html b/docs/interfaces/graphics_rendering_renderer_renderer.Renderer.html index fd4ae91..4f7cbc5 100644 --- a/docs/interfaces/graphics_rendering_renderer_renderer.Renderer.html +++ b/docs/interfaces/graphics_rendering_renderer_renderer.Renderer.html @@ -11,10 +11,10 @@ setViewArea worldToDisplayCoordinates

                                                      Properties

                                                      canvasSize: ReadonlyVec2

                                                      Get the actual resolution of the canvas without triggering a reflow.

                                                      -

                                                      A ResizeObserver is utilised fot achieving this.

                                                      +

                                                      A ResizeObserver is used to achieve this.

                                                      insights: RendererInfo | null

                                                      Get useful information about the hardware and the SDF2D renderer.

                                                      -

                                                      Its scheme is subject to change.

                                                      -

                                                      During context lost it might be null.

                                                      +

                                                      Its schema is subject to change.

                                                      +

                                                      During a context-lost event, it might be null.

                                                      viewAreaSize: ReadonlyVec2

                                                      Get the viewArea size set by the last setViewArea.

                                                      By default, canvasSize is used for the view area size.

                                                      Methods

                                                      • Schedule a drawable to be rendered during the next renderDrawables call.

                                                        @@ -34,7 +34,7 @@ Just as in mouse events' clientX and clientY.

                                                        when calling renderDrawables.

                                                        Returns void

                                                      • Patch the current runtime settings with new values.

                                                        Parameters

                                                        Returns void

                                                      • Set the camera transformation.

                                                        -

                                                        Parameters

                                                        • topLeft: ReadonlyVec2

                                                          top (!) left. By default, equals to [0, canvasHeight].

                                                          +

                                                          Parameters

                                                          • topLeft: ReadonlyVec2

                                                            top (!) left. By default, equal to [0, canvasHeight].

                                                          • size: ReadonlyVec2

                                                            need not be equal to the canvas size, though their aspect ratio should be the same to avoid stretching.

                                                          Returns void

                                                      • The inverse of displayToWorldCoordinates, returns the screen space position diff --git a/docs/interfaces/graphics_rendering_settings_runtime-settings.RuntimeSettings.html b/docs/interfaces/graphics_rendering_settings_runtime-settings.RuntimeSettings.html index c5516e1..f38af0f 100644 --- a/docs/interfaces/graphics_rendering_settings_runtime-settings.RuntimeSettings.html +++ b/docs/interfaces/graphics_rendering_settings_runtime-settings.RuntimeSettings.html @@ -12,34 +12,34 @@ that can be changed during runtime.

                                                        textures tileMultiplier

                                                      Properties

                                                      ambientLight: vec3

                                                      A light affecting every pixel (even the ones inside objects).

                                                      -
                                                      colorPalette: (
                                                          | IndexedCollection
                                                          | [number, number, number]
                                                          | [number, number, number, number]
                                                      )[]

                                                      Its length should be less than the one specified in [[StartupSettings]].paletteSize.

                                                      -

                                                      The possible colors for the objects. Each color is referenced by its index in the +

                                                      colorPalette: (
                                                          | IndexedCollection
                                                          | [number, number, number]
                                                          | [number, number, number, number]
                                                      )[]

                                                      The possible colors for the objects. Each color is referenced by its index in the palette.

                                                      -

                                                      Can have transparency, but only if WebGL2 support is enabled.

                                                      +

                                                      Its length should be less than the paletteSize specified in [[StartupSettings]].

                                                      +

                                                      Colors can have transparency, but only if WebGL2 support is enabled.

                                                      distanceRenderScale: number

                                                      The resolution of the distance field rendering will be scaled up or down with this value.

                                                      Because of interpolation, this can be set much lower than the lightsRenderScale, while maintaining closely the same perceived quality.

                                                      Setting this is a great way to balance quality and performance.

                                                      -
                                                      enableHighDpiRendering: boolean

                                                      When set to true rendering will be done on the screen's real resolution.

                                                      +
                                                      enableHighDpiRendering: boolean

                                                      When set to true, rendering will be done at the screen's real resolution.

                                                      isWorldInverted: boolean

                                                      By default, every pixel is outside of objects. Flipping this value to true will -result in every pixel being inside a large object. From then it only makes sense to +result in every pixel being inside a large object. From then on, it only makes sense to draw inverted objects.

                                                      -
                                                      lightCutoffDistance: number

                                                      When lights reach the end of the display, they are slowly faded out. The length -of this phaseout can be set through this value.

                                                      +
                                                      lightCutoffDistance: number

                                                      When lights reach the edge of the display, they are slowly faded out. The length +of this fade-out can be set through this value.

                                                      lightsRenderScale: number

                                                      The resolution of the final frame will be scaled by this value.

                                                      Setting this is a great way to balance quality and performance.

                                                      motionBlur: number

                                                      Set the extent of the motion blur.

                                                      The values must be between 0 and 1. Where 0 means no motion blur, and values just below 1 mean an extreme amount of motion blur.

                                                      textures: { [textureName: string]: TexImageSource | TextureWithOptions }

                                                      It is possible to use your own textures in your SDF definitions.

                                                      -

                                                      The keys of the object should be the name used to reference them in the GLSL code, -and the values should be the textures themselves or a TextureWithOptions specifying +

                                                      The keys of the object should be the names used to reference them in the GLSL code, +and the values should be the textures themselves, or a TextureWithOptions specifying the texture's [[TextureOptions]]. -It can be a canvas, img element, Image and so on.

                                                      +A texture can be a canvas, an img element, an Image, and so on.

                                                      tileMultiplier: number

                                                      First, the SDF of the scene is evaluated at every single pixel. -For speeding this process up, the screen is divided up into tiles, -this way each having to deal with a fewer objects.

                                                      -

                                                      For each tile, it is decided which objects are near its close vicinity. +To speed this process up, the screen is divided into tiles, +so each one has to deal with fewer objects.

                                                      +

                                                      For each tile, it is decided which objects are in its vicinity. This comes with some overhead for the CPU, while saving the GPU from loads of calculations. The workload can be balanced between the CPU and the GPU by setting this number.

                                                      diff --git a/docs/interfaces/graphics_rendering_settings_startup-settings.StartupSettings.html b/docs/interfaces/graphics_rendering_settings_startup-settings.StartupSettings.html index 8c96868..3f250e4 100644 --- a/docs/interfaces/graphics_rendering_settings_startup-settings.StartupSettings.html +++ b/docs/interfaces/graphics_rendering_settings_startup-settings.StartupSettings.html @@ -10,11 +10,11 @@ that need to be given before shader compilation.

                                                      paletteSize shadowTraceCount

                                                      Properties

                                                      backgroundColor:
                                                          | IndexedCollection
                                                          | [number, number, number]
                                                          | [number, number, number, number]

                                                      The default background color of the scene, can have transparency on every platform.

                                                      -
                                                      enableContextLostSimulator: boolean

                                                      Many context lost event will be simulated when enabled.

                                                      +
                                                      enableContextLostSimulator: boolean

                                                      Many context-lost events will be simulated when enabled.

                                                      Useful for testing.

                                                      enableStopwatch: boolean

                                                      Creates a stopwatch used for measuring the GPU render time when its required extension is available.

                                                      -

                                                      You should only have one renderer with enabled stopwatch.

                                                      +

                                                      You should only have one renderer with the stopwatch enabled.

                                                      ignoreWebGL2: boolean

                                                      When set to true, rendering will fall back to WebGL even when WebGL2 is present.

                                                      Useful for testing compatibility.

                                                      @@ -35,5 +35,5 @@ maintaining compatibility with low-end devices.

                                                      shadowTraceCount: number

                                                      The raytracing algorithm used for shadows requires a step count. Sensible values for this are between 8 and 32.

                                                      The higher the number, the harder the shadows will get. -Some ambient occlusion like effects can be visible on lower trace counts.

                                                      +Some ambient-occlusion-like effects can be visible at lower trace counts.