From 971ddbd08e2f874b886b8dd03819848f377f392b Mon Sep 17 00:00:00 2001 From: schmelczerandras Date: Mon, 28 Sep 2020 17:39:07 +0200 Subject: [PATCH] Improve uniform loading --- docs/classes/circle.html | 33 +-- docs/classes/circlelight.html | 35 +-- docs/classes/drawable.html | 9 +- docs/classes/flashlight.html | 39 ++-- docs/classes/invertedtunnel.html | 43 ++-- docs/classes/tunnel.html | 41 ++-- docs/favicon.ico | Bin 0 -> 15406 bytes docs/globals.html | 27 +-- docs/index.html | 1 + docs/interfaces/drawabledescriptor.html | 11 +- docs/interfaces/renderer.html | 19 +- docs/interfaces/runtimesettings.html | 15 +- docs/interfaces/startupsettings.html | 7 +- docs/media/favicon.ico | Bin 0 -> 15406 bytes media/favicon.ico | Bin 0 -> 15406 bytes package.json | 1 + .../helper/enable-context-lost-simulator.ts | 6 +- .../graphics-library/helper/load-uniform.ts | 206 +++++++++--------- .../uniform-array-autoscaling-program.ts | 4 +- .../renderer/context-aware-renderer.ts | 24 +- typedoc.json | 1 + 21 files changed, 271 insertions(+), 251 deletions(-) create mode 100644 docs/favicon.ico create mode 100644 docs/media/favicon.ico create mode 100644 media/favicon.ico diff --git a/docs/classes/circle.html b/docs/classes/circle.html index 35f08b4..8d098f4 100644 --- a/docs/classes/circle.html +++ b/docs/classes/circle.html @@ -7,6 +7,7 @@ +
@@ -125,7 +126,7 @@
  • Parameters

    @@ -150,7 +151,7 @@
    center: vec2
    @@ -160,7 +161,7 @@
    radius: number
    @@ -178,7 +179,7 @@

    Parameters

    @@ -205,7 +206,7 @@

    Parameters

    @@ -229,7 +230,7 @@

    Parameters

    @@ -258,7 +259,7 @@
    @@ -267,7 +268,7 @@
    empty: Circle = new Circle(vec2.fromValues(0, 0), 0)
    @@ -277,7 +278,7 @@
    shaderCombinationSteps: number[] = [0, 1, 2, 3, 8, 16]
    @@ -287,7 +288,7 @@
    uniformCountMacroName: string = "CIRCLE_COUNT"
    @@ -297,7 +298,7 @@
    propertyUniformMapping: object
    @@ -306,7 +307,7 @@
    center: string = "circleCenters"
    @@ -316,7 +317,7 @@
    radius: string = "circleRadii"
    @@ -327,7 +328,7 @@
    sdf: object
    @@ -336,7 +337,7 @@
    distanceFunctionName: string = "circleMinDistance"
    @@ -346,7 +347,7 @@
    shader: string = `uniform vec2 circleCenters[CIRCLE_COUNT];uniform float circleRadii[CIRCLE_COUNT];float circleMinDistance(vec2 target, out float colorIndex) {colorIndex = 2.0;float minDistance = 1000.0;for (int i = 0; i < CIRCLE_COUNT; i++) {float dist = distance(circleCenters[i], target) - circleRadii[i];minDistance = min(minDistance, dist);}return minDistance;}`
    diff --git a/docs/classes/circlelight.html b/docs/classes/circlelight.html index d0640ae..9cece68 100644 --- a/docs/classes/circlelight.html +++ b/docs/classes/circlelight.html @@ -7,6 +7,7 @@ +
    @@ -129,7 +130,7 @@

    Parameters

    @@ -158,7 +159,7 @@ @@ -169,7 +170,7 @@ @@ -180,7 +181,7 @@ @@ -191,7 +192,7 @@ @@ -210,7 +211,7 @@

    Inherited from LightDrawable.getObjectToSerialize

    Overrides Drawable.getObjectToSerialize

    Parameters

    @@ -238,7 +239,7 @@

    Inherited from Flashlight.minDistance

    Overrides Drawable.minDistance

    Parameters

    @@ -262,7 +263,7 @@

    Parameters

    @@ -292,7 +293,7 @@

    Parameters

    @@ -315,7 +316,7 @@
    @@ -324,7 +325,7 @@
    empty: CircleLight = new CircleLight(vec2.fromValues(0, 0), vec3.fromValues(0, 0, 0), 0)
    @@ -334,7 +335,7 @@
    shaderCombinationSteps: number[] = [0, 1, 2, 4, 8, 16]
    @@ -344,7 +345,7 @@
    uniformCountMacroName: string = "CIRCLE_LIGHT_COUNT"
    @@ -354,7 +355,7 @@
    propertyUniformMapping: object
    @@ -363,7 +364,7 @@
    center: string = "circleLightCenters"
    @@ -373,7 +374,7 @@
    color: string = "circleLightColors"
    @@ -383,7 +384,7 @@
    intensity: string = "circleLightIntensities"
    diff --git a/docs/classes/drawable.html b/docs/classes/drawable.html index c762b48..b926d4a 100644 --- a/docs/classes/drawable.html +++ b/docs/classes/drawable.html @@ -7,6 +7,7 @@ +
    @@ -121,7 +122,7 @@
    descriptor: DrawableDescriptor
    @@ -143,7 +144,7 @@
  • @@ -182,7 +183,7 @@
  • @@ -214,7 +215,7 @@
  • Parameters

    diff --git a/docs/classes/flashlight.html b/docs/classes/flashlight.html index 85da6d9..88f4c3d 100644 --- a/docs/classes/flashlight.html +++ b/docs/classes/flashlight.html @@ -7,6 +7,7 @@ +
    @@ -130,7 +131,7 @@

    Parameters

    @@ -162,7 +163,7 @@ @@ -173,7 +174,7 @@ @@ -183,7 +184,7 @@
    direction: vec2
    @@ -194,7 +195,7 @@ @@ -205,7 +206,7 @@ @@ -223,7 +224,7 @@

    Parameters

    @@ -251,7 +252,7 @@

    Inherited from Flashlight.minDistance

    Overrides Drawable.minDistance

    Parameters

    @@ -275,7 +276,7 @@

    Parameters

    @@ -305,7 +306,7 @@

    Parameters

    @@ -328,7 +329,7 @@
    @@ -337,7 +338,7 @@
    empty: Flashlight = new Flashlight(vec2.fromValues(0, 0),vec3.fromValues(0, 0, 0),0,vec2.fromValues(0, 0))
    @@ -347,7 +348,7 @@
    shaderCombinationSteps: number[] = [0, 1, 2, 4]
    @@ -357,7 +358,7 @@
    uniformCountMacroName: string = "FLASHLIGHT_COUNT"
    @@ -367,7 +368,7 @@
    propertyUniformMapping: object
    @@ -376,7 +377,7 @@
    center: string = "flashlightCenters"
    @@ -386,7 +387,7 @@
    color: string = "flashlightColors"
    @@ -396,7 +397,7 @@
    direction: string = "flashlightDirections"
    @@ -406,7 +407,7 @@
    intensity: string = "flashlightIntensities"
    diff --git a/docs/classes/invertedtunnel.html b/docs/classes/invertedtunnel.html index fa26d7e..0192e02 100644 --- a/docs/classes/invertedtunnel.html +++ b/docs/classes/invertedtunnel.html @@ -7,6 +7,7 @@ +
    @@ -127,7 +128,7 @@
  • Parameters

    @@ -158,7 +159,7 @@
    from: vec2
    @@ -168,7 +169,7 @@
    fromRadius: number
    @@ -178,7 +179,7 @@
    to: vec2
    @@ -188,7 +189,7 @@
    toRadius: number
    @@ -206,7 +207,7 @@

    Parameters

    @@ -233,7 +234,7 @@

    Parameters

    @@ -257,7 +258,7 @@

    Parameters

    @@ -286,7 +287,7 @@
    @@ -295,7 +296,7 @@
    empty: InvertedTunnel = new InvertedTunnel(vec2.fromValues(0, 0), vec2.fromValues(0, 0), 0, 0)
    @@ -305,7 +306,7 @@
    shaderCombinationSteps: number[] = [0, 1, 4, 16, 32]
    @@ -315,7 +316,7 @@
    uniformCountMacroName: string = "INVERTED_TUNNEL_COUNT"
    @@ -325,7 +326,7 @@
    propertyUniformMapping: object
    @@ -334,7 +335,7 @@
    from: string = "froms"
    @@ -344,7 +345,7 @@
    fromRadius: string = "fromRadii"
    @@ -354,7 +355,7 @@
    toFromDelta: string = "toFromDeltas"
    @@ -364,7 +365,7 @@
    toRadius: string = "toRadii"
    @@ -375,7 +376,7 @@
    sdf: object
    @@ -384,7 +385,7 @@
    distanceFunctionName: string = "invertedTunnelMinDistance"
    @@ -394,7 +395,7 @@
    isInverted: true = true
    @@ -404,7 +405,7 @@
    shader: string = `uniform vec2 froms[INVERTED_TUNNEL_COUNT];uniform vec2 toFromDeltas[INVERTED_TUNNEL_COUNT];uniform float fromRadii[INVERTED_TUNNEL_COUNT];uniform float toRadii[INVERTED_TUNNEL_COUNT];float invertedTunnelMinDistance(vec2 target, out float colorIndex) {colorIndex = 3.0;float minDistance = 1000.0;for (int i = 0; i < INVERTED_TUNNEL_COUNT; i++) {vec2 targetFromDelta = target - froms[i];float h = clamp(dot(targetFromDelta, toFromDeltas[i])/ dot(toFromDeltas[i], toFromDeltas[i]),0.0, 1.0);float currentDistance = -mix(fromRadii[i], toRadii[i], h) + distance(targetFromDelta, toFromDeltas[i] * h);minDistance = min(minDistance, currentDistance);}return -minDistance;}`
    diff --git a/docs/classes/tunnel.html b/docs/classes/tunnel.html index 89ddd43..8dbd5d6 100644 --- a/docs/classes/tunnel.html +++ b/docs/classes/tunnel.html @@ -7,6 +7,7 @@ +
    @@ -127,7 +128,7 @@
  • Parameters

    @@ -158,7 +159,7 @@
    from: vec2
    @@ -168,7 +169,7 @@
    fromRadius: number
    @@ -178,7 +179,7 @@
    to: vec2
    @@ -188,7 +189,7 @@
    toRadius: number
    @@ -206,7 +207,7 @@

    Parameters

    @@ -233,7 +234,7 @@

    Parameters

    @@ -257,7 +258,7 @@

    Parameters

    @@ -286,7 +287,7 @@
    @@ -295,7 +296,7 @@
    empty: Tunnel = new Tunnel(vec2.fromValues(-100000, -100000),vec2.fromValues(-100000, -100000),0,0)
    @@ -305,7 +306,7 @@
    shaderCombinationSteps: number[] = [0, 1, 4, 16, 32]
    @@ -315,7 +316,7 @@
    uniformCountMacroName: string = "TUNNEL_COUNT"
    @@ -325,7 +326,7 @@
    propertyUniformMapping: object
    @@ -334,7 +335,7 @@
    from: string = "froms"
    @@ -344,7 +345,7 @@
    fromRadius: string = "fromRadii"
    @@ -354,7 +355,7 @@
    toFromDelta: string = "toFromDeltas"
    @@ -364,7 +365,7 @@
    toRadius: string = "toRadii"
    @@ -375,7 +376,7 @@
    sdf: object
    @@ -384,7 +385,7 @@
    distanceFunctionName: string = "tunnelMinDistance"
    @@ -394,7 +395,7 @@
    shader: string = `uniform vec2 froms[TUNNEL_COUNT];uniform vec2 toFromDeltas[TUNNEL_COUNT];uniform float fromRadii[TUNNEL_COUNT];uniform float toRadii[TUNNEL_COUNT];float tunnelMinDistance(vec2 target, out float colorIndex) {colorIndex = 1.0;float minDistance = 1000.0;for (int i = 0; i < TUNNEL_COUNT; i++) {vec2 targetFromDelta = target - froms[i];float h = clamp(dot(targetFromDelta, toFromDeltas[i])/ dot(toFromDeltas[i], toFromDeltas[i]),0.0, 1.0);float currentDistance = -mix(fromRadii[i], toRadii[i], h) + distance(targetFromDelta, toFromDeltas[i] * h);minDistance = min(minDistance, currentDistance);}return minDistance;}`
    diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b54e7802792c2f23bbc237783c6c2f8b6ac210ca GIT binary patch literal 15406 zcmeHOeNa=`6@S*x(Vgx}x9xOhcZRCnDk8;Eq-2q0Wd&J9JdRRiz5y^)RA{~835aSbAFoXv!<33PPeA}rR@(=_!ncHahJr0BLNM#O$cXxgL? z(}uL=5nfNKqkTBcJHVfFTO5k8?VTMc;P=4~E}#bv56QQy2fycdFFDx72A-8ynO48+CN*Tdik~eb-i;ZjqMZ zhqTv@?oi%3zUNhA=H6HLPR1*d2h+~3rJP^H(Sg*WlF-$nsy$vgmv~z;>J9{Kyq>({ zmFoB&qRre(n)4H0H5a68Y?p~MdMi%m^j$h5(&^|$->53%OzAyys`*>8EYWvQqGw}a zo^8R;&@i<<`m<;L#_fkcd;77+ewp#JYg^Y3n--tP)-Qk7>vuB0>HbDP;|?Vd3i>BU z|5RM=LbV{OLnDgmz-LGEpNSt0{-!|~t z25i|&ti`HG+O(JsG`~mH#s@Bg`5y%NgE~5XnK`~XnqJhWNLp;JeY*E3TORH?P!aiu zUK!V8TK!rhzeOf=>nh9b?WxEg=u;@H#(?9Nhi~YujPfSc+|7C=*KZ1jndGDFMn z%dviXkWcCkeXOsK3tqv{Xw&)cV`2V&P!zY~q4cQ!>%uhBenDurY=$q+KaRit(8oVq zNeozlw4ZjV9 zY2hQ_{|U$^ce3}7+|7&EqV8Mh)HM%^#N#?*=p9kxxUU`w*4{Y!DY==pn=tYlvt!BK zlkwy}eOPPjUcjZOg)}u0-(t*G8|c1lyu`aNLt8`qpnu=1M?yv>%fG|OKYe)QUO|#C z_C=qgtEHD=`Pb{hUV|9xs#L0lQoofQh5ohtHs`J3mG^S3i~ zJD0pMPXZ}gDjte6@+834;;-REqz{~9`XQg&e@DdgvDo=X)`)9BEsRKkbGQNWxrW9} zeu}N}x2uPw5k#y5KiYI##BI`K^47T;&l~ykO9SYKwL_M)3Fe#{^ADYD*H*qGZihYPWn?eZ1MLg=;ivd z+*951lS4ffw9*k{I1750@Ae#myGBwKz41kLjE_WVCU3&2kl+)cwuzOTg6JlLxLCOT<(rz}I#S&}u}buowN4+DMzceVz|oo2&XYFb;e1%Dr4?>H~a?kE-;Ag@h8|HD1< z&n0L}Yz+23*>P!s1boh}D&Eq=_4wiX_jwx1Um+KWX5^l#9Y z=1A<#O`97l&ch|1Pd3;O=$}Js;q(#Zv*qC&V4eXBKC|0erAht|3Q`P!pR}D#Gqjx(NS$RfY`N@bw3*uY z53|3F4=~gxZX2pQ9OQ-VG}mLvtz)}_)Pe}PMi|`&_S2@#*e7qwjSXVv2=eh>a33-B z@JuS`|FdkgB{uK5dWLnnq%I-QAF<>4M3o%s@zt?iYPdsqdFw<3X%I#cxW^v-CgV=d z{+IXi4yv2!Lmt@oYx<~Ht2EUgZE3FXT9R`WuwP5w(Rm|v=g7^^!pIo@Xf}S*ly`8X zIsZ^+Go9>ViPv1Wq0L-7608RNBVVQNBXogBo-Lf@)V0skpQHTn+vnXG@LWA^3( z&d+@cKYTakT)=O}&!~u57W~_=lF$!CWnms-xHA$%{3EW4_7+3@Bd+HAh?V;|{N~Wm zr8tiIgdq9V!`q1^{7pIg$!q;1e$paImLu-w(zK#v)bcG)MZHpoI& zJu3I%cR4T^q=pE>-iE#dzk#6SOKpmh+3+hVx5@OeAsk`DNPk +
    @@ -114,7 +115,7 @@
  • @@ -169,7 +170,7 @@
    defaultRuntimeSettings: object
    @@ -183,7 +184,7 @@
    ambientLight: vec3 = vec3.fromValues(0.25, 0.15, 0.25)
    @@ -193,7 +194,7 @@
    backgroundColor: vec4 = vec4.fromValues(1, 1, 1, 1)
    @@ -203,7 +204,7 @@
    colorPalette: never[] = []
    @@ -213,7 +214,7 @@
    enableHighDpiRendering: true = true
    @@ -223,7 +224,7 @@
    isWorldInverted: false = false
    @@ -233,7 +234,7 @@
    lightCutoffDistance: number = 400
    @@ -243,7 +244,7 @@
    tileMultiplier: number = 8
    @@ -254,7 +255,7 @@
    defaultStartupSettings: object
    @@ -268,7 +269,7 @@
    ignoreWebGL2: false = false
    @@ -278,7 +279,7 @@
    paletteSize: number = 256
    @@ -288,7 +289,7 @@
    shadowTraceCount: number = 16
    diff --git a/docs/index.html b/docs/index.html index 2a26ffe..fb7e475 100644 --- a/docs/index.html +++ b/docs/index.html @@ -7,6 +7,7 @@ +
    diff --git a/docs/interfaces/drawabledescriptor.html b/docs/interfaces/drawabledescriptor.html index 4aaf721..ee932db 100644 --- a/docs/interfaces/drawabledescriptor.html +++ b/docs/interfaces/drawabledescriptor.html @@ -7,6 +7,7 @@ +
    @@ -106,7 +107,7 @@
    empty: Drawable
    @@ -122,7 +123,7 @@
    propertyUniformMapping: {}
    @@ -146,7 +147,7 @@
    sdf: undefined | { distanceFunctionName: string; isInverted?: undefined | false | true; shader: string }
    @@ -161,7 +162,7 @@
    shaderCombinationSteps: Array<number>
    @@ -178,7 +179,7 @@
    uniformCountMacroName: string
    diff --git a/docs/interfaces/renderer.html b/docs/interfaces/renderer.html index e74c504..6564346 100644 --- a/docs/interfaces/renderer.html +++ b/docs/interfaces/renderer.html @@ -7,6 +7,7 @@ +
    @@ -112,7 +113,7 @@
    canvasSize: vec2
    @@ -127,7 +128,7 @@
    insights: any
    @@ -146,7 +147,7 @@
    viewAreaSize: vec2
    @@ -169,7 +170,7 @@
  • @@ -207,7 +208,7 @@
  • @@ -241,7 +242,7 @@
  • @@ -265,7 +266,7 @@
  • @@ -289,7 +290,7 @@
  • @@ -319,7 +320,7 @@
  • diff --git a/docs/interfaces/runtimesettings.html b/docs/interfaces/runtimesettings.html index d0148d2..bb82dbe 100644 --- a/docs/interfaces/runtimesettings.html +++ b/docs/interfaces/runtimesettings.html @@ -7,6 +7,7 @@ +
    @@ -106,7 +107,7 @@
    ambientLight: vec3
    @@ -121,7 +122,7 @@
    backgroundColor: vec3 | vec4
    @@ -136,7 +137,7 @@
    colorPalette: Array<vec3 | vec4>
    @@ -154,7 +155,7 @@
    enableHighDpiRendering: boolean
    @@ -169,7 +170,7 @@
    isWorldInverted: boolean
    @@ -186,7 +187,7 @@
    lightCutoffDistance: number
    @@ -202,7 +203,7 @@
    tileMultiplier: number
    diff --git a/docs/interfaces/startupsettings.html b/docs/interfaces/startupsettings.html index 59162ae..5a7b7f9 100644 --- a/docs/interfaces/startupsettings.html +++ b/docs/interfaces/startupsettings.html @@ -7,6 +7,7 @@ +
    @@ -102,7 +103,7 @@
    ignoreWebGL2: boolean
    @@ -119,7 +120,7 @@
    paletteSize: number
    @@ -137,7 +138,7 @@
    shadowTraceCount: number
    diff --git a/docs/media/favicon.ico b/docs/media/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b54e7802792c2f23bbc237783c6c2f8b6ac210ca GIT binary patch literal 15406 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 { isEnabled = true; const gl = canvas.getContext('webgl2')!; - const ext = gl.getExtension('WEBGL_lose_context'); + const ext = gl.getExtension('WEBGL_lose_context')!; const simulateContextLost = () => { - ext!.loseContext(); + ext.loseContext(); console.log('lost'); const restoreTimeout = Math.random() * 500; setTimeout(() => { - ext!.restoreContext(); + ext.restoreContext(); console.log('restored'); }, restoreTimeout); diff --git a/src/graphics/graphics-library/helper/load-uniform.ts b/src/graphics/graphics-library/helper/load-uniform.ts index ff1afc0..e0e34b9 100644 --- a/src/graphics/graphics-library/helper/load-uniform.ts +++ b/src/graphics/graphics-library/helper/load-uniform.ts @@ -1,9 +1,114 @@ -import { mat3, ReadonlyVec3, ReadonlyVec4, vec2, vec3, vec4 } from 'gl-matrix'; +import { mat3, vec2, vec3, vec4 } from 'gl-matrix'; import { UniversalRenderingContext } from '../universal-rendering-context'; /** @internal */ const loaderMat3 = mat3.create(); +/** @internal */ +const converters: Map< + GLenum, + (gl: UniversalRenderingContext, value: any, location: WebGLUniformLocation) => void +> = new Map(); +converters.set(WebGLRenderingContext.SAMPLER_2D, (gl, v, l) => gl.uniform1i(l, v)); + +converters.set( + WebGLRenderingContext.FLOAT, + (gl, v: number | Array | Float32Array, l) => { + if (v instanceof Array || v instanceof Float32Array) { + if (v.length == 0) { + return; + } + + gl.uniform1fv(l, new Float32Array(v)); + } else { + gl.uniform1f(l, v); + } + } +); + +converters.set( + WebGLRenderingContext.FLOAT_VEC2, + (gl, v: vec2 | Array | Float32Array, l) => { + if (v.length == 0) { + return; + } + + if (v[0] instanceof Array || v[0] instanceof Float32Array) { + const result = new Float32Array(v.length * 2); + + for (let i = 0; i < v.length; i++) { + result[2 * i] = (v[i] as Array).x; + result[2 * i + 1] = (v[i] as Array).y; + } + gl.uniform2fv(l, result); + } else { + gl.uniform2fv(l, v as vec2); + } + } +); + +converters.set( + WebGLRenderingContext.FLOAT_VEC3, + (gl, v: vec3 | Array | Float32Array, l) => { + if (v.length == 0) { + return; + } + + if (v[0] instanceof Array || v[0] instanceof Float32Array) { + const result = new Float32Array(v.length * 3); + + for (let i = 0; i < v.length; i++) { + result[3 * i] = (v[i] as Array)[0]; + result[3 * i + 1] = (v[i] as Array)[1]; + result[3 * i + 2] = (v[i] as Array)[2]; + } + + gl.uniform3fv(l, result); + } else { + gl.uniform3fv(l, v as vec3); + } + } +); + +converters.set( + WebGLRenderingContext.FLOAT_VEC4, + (gl, v: vec4 | Array | Float32Array, l) => { + if (v.length == 0) { + return; + } + + if (v[0] instanceof Array || v[0] instanceof Float32Array) { + const result = new Float32Array(v.length * 4); + + for (let i = 0; i < v.length; i++) { + result[3 * i] = (v[i] as Array)[0]; + result[3 * i + 1] = (v[i] as Array)[1]; + result[3 * i + 2] = (v[i] as Array)[2]; + result[3 * i + 3] = (v[i] as Array)[3]; + } + + gl.uniform4fv(l, result); + } else { + gl.uniform4fv(l, v as vec4); + } + } +); + +converters.set(WebGLRenderingContext.FLOAT_MAT3, (gl, v, l) => { + if (gl.isWebGL2) { + gl.uniformMatrix3fv(l, true, mat3.fromMat2d(loaderMat3, v)); + } else { + gl.uniformMatrix3fv( + l, + false, + mat3.transpose(mat3.create(), mat3.fromMat2d(loaderMat3, v)) + ); + } +}); + +converters.set(WebGLRenderingContext.BOOL, (gl, v: number, l) => gl.uniform1i(l, v)); +converters.set(WebGLRenderingContext.INT, (gl, v: number, l) => gl.uniform1i(l, v)); + /** @internal */ export const loadUniform = ( gl: UniversalRenderingContext, @@ -11,106 +116,7 @@ export const loadUniform = ( type: GLenum, location: WebGLUniformLocation ): any => { - const converters: Map< - GLenum, - (gl: UniversalRenderingContext, value: any, location: WebGLUniformLocation) => void - > = new Map(); { - converters.set(WebGLRenderingContext.SAMPLER_2D, (gl, v, l) => { - gl.uniform1i(l, v); - }); - - converters.set(WebGLRenderingContext.FLOAT, (gl, v, l) => { - if (v instanceof Array || v[0] instanceof Float32Array) { - if (v.length == 0) { - return; - } - - gl.uniform1fv(l, new Float32Array(v)); - } else { - gl.uniform1f(l, v); - } - }); - - converters.set(WebGLRenderingContext.FLOAT_VEC2, (gl, v: vec2 | Array, l) => { - if (v.length == 0) { - return; - } - - if (v[0] instanceof Array || v[0] instanceof Float32Array) { - const result = new Float32Array(v.length * 2); - - for (let i = 0; i < v.length; i++) { - result[2 * i] = (v[i] as Array).x; - result[2 * i + 1] = (v[i] as Array).y; - } - gl.uniform2fv(l, result); - } else { - gl.uniform2fv(l, v as vec2); - } - }); - - converters.set( - WebGLRenderingContext.FLOAT_VEC3, - (gl, v: ReadonlyVec3 | Array, l) => { - if (v.length == 0) { - return; - } - - if (v[0] instanceof Array || v[0] instanceof Float32Array) { - const result = new Float32Array(v.length * 3); - - for (let i = 0; i < v.length; i++) { - result[3 * i] = (v[i] as Array)[0]; - result[3 * i + 1] = (v[i] as Array)[1]; - result[3 * i + 2] = (v[i] as Array)[2]; - } - - gl.uniform3fv(l, result); - } else { - gl.uniform3fv(l, v as vec3); - } - } - ); - - converters.set( - WebGLRenderingContext.FLOAT_VEC4, - (gl, v: ReadonlyVec4 | Array, l) => { - if (v.length == 0) { - return; - } - - if (v[0] instanceof Array || v[0] instanceof Float32Array) { - const result = new Float32Array(v.length * 4); - - for (let i = 0; i < v.length; i++) { - result[3 * i] = (v[i] as Array)[0]; - result[3 * i + 1] = (v[i] as Array)[1]; - result[3 * i + 2] = (v[i] as Array)[2]; - result[3 * i + 3] = (v[i] as Array)[3]; - } - - gl.uniform4fv(l, result); - } else { - gl.uniform4fv(l, v as vec4); - } - } - ); - - converters.set(WebGLRenderingContext.FLOAT_MAT3, (gl, v, l) => { - if (gl.isWebGL2) { - gl.uniformMatrix3fv(l, true, mat3.fromMat2d(loaderMat3, v)); - } else { - gl.uniformMatrix3fv( - l, - false, - mat3.transpose(mat3.create(), mat3.fromMat2d(loaderMat3, v)) - ); - } - }); - - converters.set(WebGLRenderingContext.BOOL, (gl, v, l) => gl.uniform1i(l, v)); - if (!converters.has(type)) { throw new Error(`Unimplemented webgl type: ${type}`); } diff --git a/src/graphics/graphics-library/program/uniform-array-autoscaling-program.ts b/src/graphics/graphics-library/program/uniform-array-autoscaling-program.ts index 07def61..0ba43c8 100644 --- a/src/graphics/graphics-library/program/uniform-array-autoscaling-program.ts +++ b/src/graphics/graphics-library/program/uniform-array-autoscaling-program.ts @@ -15,7 +15,7 @@ export class UniformArrayAutoScalingProgram implements IProgram { }> = []; private current?: FragmentShaderOnlyProgram; - private descriptors?: Array; + private descriptors!: Array; private drawingRectangleBottomLeft = vec2.fromValues(0, 0); private drawingRectangleSize = vec2.fromValues(1, 1); @@ -54,7 +54,7 @@ export class UniformArrayAutoScalingProgram implements IProgram { } public draw(uniforms: { [name: string]: any }): void { - const values = this.descriptors!.map((d) => { + const values = this.descriptors.map((d) => { const uniformNames = last(Object.entries(d.propertyUniformMapping)); if (!uniformNames) { return 0; diff --git a/src/graphics/rendering/renderer/context-aware-renderer.ts b/src/graphics/rendering/renderer/context-aware-renderer.ts index 95beafc..3d1055c 100644 --- a/src/graphics/rendering/renderer/context-aware-renderer.ts +++ b/src/graphics/rendering/renderer/context-aware-renderer.ts @@ -8,9 +8,9 @@ import { RendererImplementation } from './renderer-implementation'; /** @internal */ export class ContextAwareRenderer implements Renderer { - private renderer?: RendererImplementation; + private renderer!: RendererImplementation; private isRendererReady = false; - private readyPromise?: Promise; + private readyPromise!: Promise; private runtimeOverrides: Partial = {}; private ignoreWebGL2?: boolean; private previousViewAreaTopLeft?: vec2; @@ -34,7 +34,7 @@ export class ContextAwareRenderer implements Renderer { } public get initializedPromise(): Promise { - return this.readyPromise!; + return this.readyPromise; } private createRenderer() { @@ -102,21 +102,21 @@ export class ContextAwareRenderer implements Renderer { } public get canvasSize(): vec2 { - return this.handle(() => this.renderer!.canvasSize, vec2.create()); + return this.handle(() => this.renderer.canvasSize, vec2.create()); } public get viewAreaSize(): vec2 { - return this.handle(() => this.renderer!.viewAreaSize, vec2.create()); + return this.handle(() => this.renderer.viewAreaSize, vec2.create()); } public get insights(): any { - return this.handle(() => this.renderer!.insights, {}); + return this.handle(() => this.renderer.insights, {}); } public setViewArea(topLeft: vec2, size: vec2): void { this.previousViewAreaTopLeft = topLeft; this.previousViewAreaSize = size; - return this.handle(() => this.renderer!.setViewArea(topLeft, size), undefined); + return this.handle(() => this.renderer.setViewArea(topLeft, size), undefined); } public setRuntimeSettings(overrides: Partial): void { @@ -125,19 +125,19 @@ export class ContextAwareRenderer implements Renderer { ...overrides, }; - return this.handle(() => this.renderer!.setRuntimeSettings(overrides), undefined); + return this.handle(() => this.renderer.setRuntimeSettings(overrides), undefined); } public addDrawable(drawable: Drawable): void { - return this.handle(() => this.renderer!.addDrawable(drawable), undefined); + return this.handle(() => this.renderer.addDrawable(drawable), undefined); } public autoscaleQuality(deltaTime: number): void { - return this.handle(() => this.renderer!.autoscaleQuality(deltaTime), undefined); + return this.handle(() => this.renderer.autoscaleQuality(deltaTime), undefined); } public renderDrawables(): void { - return this.handle(() => this.renderer!.renderDrawables(), undefined); + return this.handle(() => this.renderer.renderDrawables(), undefined); } public destroy(): void { @@ -151,6 +151,6 @@ export class ContextAwareRenderer implements Renderer { this.isRendererReady = false; - this.handle(() => this.renderer!.destroy(), undefined); + this.handle(() => this.renderer.destroy(), undefined); } } diff --git a/typedoc.json b/typedoc.json index 2e34ee6..5de5e0c 100644 --- a/typedoc.json +++ b/typedoc.json @@ -11,6 +11,7 @@ "includeVersion": true, "hideGenerator": true, "inputFiles": "src", + "favicon": "media/favicon.ico", "ignoreCompilerErrors": true, "listInvalidSymbolLinks": true, "readme": "documentation-readme.md"