@deck.gl/extensions 9.0.0-beta.6 → 9.0.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +500 -694
- package/dist.min.js +526 -717
- package/package.json +8 -12
package/dist.min.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
else if (typeof define === 'function' && define.amd) define([], factory);
|
|
5
5
|
else if (typeof exports === 'object') exports['deck'] = factory();
|
|
6
6
|
else root['deck'] = factory();})(globalThis, function () {
|
|
7
|
-
"use strict";var __exports__=(()=>{var
|
|
7
|
+
"use strict";var __exports__=(()=>{var Rt=Object.create;var $=Object.defineProperty;var Ct=Object.getOwnPropertyDescriptor;var St=Object.getOwnPropertyNames;var kt=Object.getPrototypeOf,Nt=Object.prototype.hasOwnProperty;var Le=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Oe=(r,e)=>{for(var t in e)$(r,t,{get:e[t],enumerable:!0})},Z=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of St(e))!Nt.call(r,s)&&s!==t&&$(r,s,{get:()=>e[s],enumerable:!(i=Ct(e,s))||i.enumerable});return r},P=(r,e,t)=>(Z(r,e,"default"),t&&Z(t,e,"default")),d=(r,e,t)=>(t=r!=null?Rt(kt(r)):{},Z(e||!r||!r.__esModule?$(t,"default",{value:r,enumerable:!0}):t,r)),Bt=r=>Z($({},"__esModule",{value:!0}),r);var m=Le((vi,Ie)=>{Ie.exports=globalThis.deck});var Ge=Le((bi,ze)=>{ze.exports=globalThis.luma});var Y={};Oe(Y,{BrushingExtension:()=>L,ClipExtension:()=>D,CollisionFilterExtension:()=>G,DataFilterExtension:()=>O,FillStyleExtension:()=>w,Fp64Extension:()=>S,MaskExtension:()=>U,PathStyleExtension:()=>N,_TerrainExtension:()=>H,project64:()=>se});var g={},Re=d(m(),1);P(g,d(m(),1));if(!Re.Layer)throw new Error("@deck.gl/core is not found");P(Y,g);var ke=d(m(),1);var Ce=d(m(),1);var wt=`
|
|
8
8
|
uniform bool brushing_enabled;
|
|
9
9
|
uniform int brushing_target;
|
|
10
10
|
uniform vec2 brushing_mousePos;
|
|
@@ -30,10 +30,10 @@ return brushing_isPointInRange(sourcePos) || brushing_isPointInRange(targetPos);
|
|
|
30
30
|
void brushing_setVisible(bool visible) {
|
|
31
31
|
brushing_isVisible = float(visible);
|
|
32
32
|
}
|
|
33
|
-
`,
|
|
33
|
+
`,Dt=`
|
|
34
34
|
uniform bool brushing_enabled;
|
|
35
35
|
in float brushing_isVisible;
|
|
36
|
-
`,
|
|
36
|
+
`,Vt={source:0,target:1,custom:2,source_target:3},jt={"vs:DECKGL_FILTER_GL_POSITION":`
|
|
37
37
|
vec2 brushingTarget;
|
|
38
38
|
vec2 brushingSource;
|
|
39
39
|
if (brushing_target == 3) {
|
|
@@ -61,7 +61,7 @@ brushing_setVisible(visible);
|
|
|
61
61
|
if (brushing_enabled && brushing_isVisible < 0.5) {
|
|
62
62
|
discard;
|
|
63
63
|
}
|
|
64
|
-
`},
|
|
64
|
+
`},Se={name:"brushing",dependencies:[Ce.project],vs:wt,fs:Dt,inject:jt,getUniforms:r=>{if(!r||!("viewport"in r))return{};let{brushingEnabled:e=!0,brushingRadius:t=1e4,brushingTarget:i="source",mousePosition:s,viewport:o}=r;return{brushing_enabled:Boolean(e&&s&&o.containsPixel(s)),brushing_radius:t,brushing_target:Vt[i]||0,brushing_mousePos:s?o.unproject([s.x-o.x,s.y-o.y]):[0,0]}}};var zt={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4},X=class extends ke.LayerExtension{getShaders(){return{modules:[Se]}}initializeState(e,t){let i=this.getAttributeManager();i&&i.add({brushingTargets:{size:2,accessor:"getBrushingTarget",shaderAttributes:{brushingTargets:{divisor:0},instanceBrushingTargets:{divisor:1}}}});let s=()=>{this.getCurrentLayer()?.setNeedsRedraw()};this.state.onMouseMove=s,e.deck&&e.deck.eventManager.on({pointermove:s,pointerleave:s})}finalizeState(e,t){if(e.deck){let i=this.state.onMouseMove;e.deck.eventManager.off({pointermove:i,pointerleave:i})}}},L=X;(()=>{X.defaultProps=zt})(),(()=>{X.extensionName="BrushingExtension"})();var b=d(m(),1);var Ne=`
|
|
65
65
|
uniform DATAFILTER_TYPE filter_min;
|
|
66
66
|
uniform DATAFILTER_TYPE filter_softMin;
|
|
67
67
|
uniform DATAFILTER_TYPE filter_softMax;
|
|
@@ -137,7 +137,7 @@ dataFilter_value = 1.0;
|
|
|
137
137
|
`,Be=`
|
|
138
138
|
uniform bool filter_transformColor;
|
|
139
139
|
in float dataFilter_value;
|
|
140
|
-
`;function
|
|
140
|
+
`;function we(r){if(!r||!("extensions"in r))return{};let{filterRange:e=[-1,1],filterEnabled:t=!0,filterTransformSize:i=!0,filterTransformColor:s=!0}=r,o=r.filterSoftRange||e;return{...Number.isFinite(e[0])?{filter_min:e[0],filter_softMin:o[0],filter_softMax:o[1],filter_max:e[1]}:{filter_min:e.map(n=>n[0]),filter_softMin:o.map(n=>n[0]),filter_softMax:o.map(n=>n[1]),filter_max:e.map(n=>n[1])},filter_enabled:t,filter_useSoftMargin:Boolean(r.filterSoftRange),filter_transformSize:t&&i,filter_transformColor:t&&s}}function Gt(r){if(!r||!("extensions"in r))return{};let e=we(r);if(Number.isFinite(e.filter_min)){let t=Math.fround(e.filter_min);e.filter_min-=t,e.filter_softMin-=t,e.filter_min64High=t;let i=Math.fround(e.filter_max);e.filter_max-=i,e.filter_softMax-=i,e.filter_max64High=i}else{let t=e.filter_min.map(Math.fround);e.filter_min=e.filter_min.map((s,o)=>s-t[o]),e.filter_softMin=e.filter_softMin.map((s,o)=>s-t[o]),e.filter_min64High=t;let i=e.filter_max.map(Math.fround);e.filter_max=e.filter_max.map((s,o)=>s-i[o]),e.filter_softMax=e.filter_softMax.map((s,o)=>s-i[o]),e.filter_max64High=i}return e}var De={"vs:#main-start":`
|
|
141
141
|
#ifdef DATAFILTER_DOUBLE
|
|
142
142
|
dataFilter_setValue(
|
|
143
143
|
DATAFILTER_ATTRIB - filter_min64High + DATAFILTER_ATTRIB_64LOW,
|
|
@@ -160,7 +160,7 @@ if (dataFilter_value == 0.0) discard;
|
|
|
160
160
|
if (filter_transformColor) {
|
|
161
161
|
color.a *= dataFilter_value;
|
|
162
162
|
}
|
|
163
|
-
`},
|
|
163
|
+
`},Ve={name:"data-filter",vs:Ne,fs:Be,inject:De,getUniforms:we},je={name:"data-filter-fp64",vs:Ne,fs:Be,inject:De,getUniforms:Gt};var Ue=d(Ge(),1);var Ut=`#version 300 es
|
|
164
164
|
#define SHADER_NAME data-filter-vertex-shader
|
|
165
165
|
|
|
166
166
|
#ifdef FLOAT_TARGET
|
|
@@ -191,7 +191,7 @@ void main() {
|
|
|
191
191
|
#endif
|
|
192
192
|
gl_PointSize = 1.0;
|
|
193
193
|
}
|
|
194
|
-
`,
|
|
194
|
+
`,qt=`#version 300 es
|
|
195
195
|
#define SHADER_NAME data-filter-fragment-shader
|
|
196
196
|
precision highp float;
|
|
197
197
|
|
|
@@ -205,174 +205,139 @@ void main() {
|
|
|
205
205
|
}
|
|
206
206
|
fragColor = vColor;
|
|
207
207
|
}
|
|
208
|
-
`,
|
|
209
|
-
uniform float ONE;
|
|
210
|
-
|
|
211
|
-
/*
|
|
212
|
-
About LUMA_FP64_CODE_ELIMINATION_WORKAROUND
|
|
213
|
-
|
|
214
|
-
The purpose of this workaround is to prevent shader compilers from
|
|
215
|
-
optimizing away necessary arithmetic operations by swapping their sequences
|
|
216
|
-
or transform the equation to some 'equivalent' form.
|
|
217
|
-
|
|
218
|
-
The method is to multiply an artifical variable, ONE, which will be known to
|
|
219
|
-
the compiler to be 1 only at runtime. The whole expression is then represented
|
|
220
|
-
as a polynomial with respective to ONE. In the coefficients of all terms, only one a
|
|
221
|
-
and one b should appear
|
|
222
|
-
|
|
223
|
-
err = (a + b) * ONE^6 - a * ONE^5 - (a + b) * ONE^4 + a * ONE^3 - b - (a + b) * ONE^2 + a * ONE
|
|
224
|
-
*/
|
|
225
|
-
|
|
226
|
-
// Divide float number to high and low floats to extend fraction bits
|
|
208
|
+
`,Wt=["float32-renderable-webgl","texture-blend-float-webgl"];function qe(r){return Wt.every(e=>r.features.has(e))}function We(r,e){return e?r.createFramebuffer({width:1,height:1,colorAttachments:[r.createTexture({format:"rgba32float",type:5126,mipmaps:!1})]}):r.createFramebuffer({width:256,height:64,colorAttachments:[r.createTexture({format:"rgba8unorm",type:5126,mipmaps:!1})]})}function He(r,e,t){return e.defines.NON_INSTANCED_MODEL=1,t&&(e.defines.FLOAT_TARGET=1),new Ue.Model(r,{id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,drawMode:0,vs:Ut,fs:qt,...e})}var Ye={blend:!0,blendFunc:[1,1,1,1],blendEquation:[32774,32774],depthTest:!1};var Yt={getFilterValue:{type:"accessor",value:0},getFilterCategory:{type:"accessor",value:0},onFilteredItemsChange:{type:"function",value:null,optional:!0},filterEnabled:!0,filterRange:[-1,1],filterSoftRange:null,filterCategories:[0],filterTransformSize:!0,filterTransformColor:!0},Kt={categorySize:1,filterSize:1,fp64:!1,countItems:!1},Ke={1:"float",2:"vec2",3:"vec3",4:"vec4"},Q=class extends b.LayerExtension{constructor(e){super({...Kt,...e})}getShaders(e){let{categorySize:t,filterSize:i,fp64:s}=e.opts;return{modules:[s?je:Ve],defines:{DATACATEGORY_TYPE:Ke[t],DATACATEGORY_CHANNELS:t,DATAFILTER_TYPE:Ke[i],DATAFILTER_DOUBLE:Boolean(s)}}}initializeState(e,t){let i=this.getAttributeManager(),{categorySize:s,filterSize:o,fp64:n}=t.opts;i&&i.add({filterValues:{size:o,type:n?"float64":"float32",accessor:"getFilterValue",shaderAttributes:{filterValues:{divisor:0},instanceFilterValues:{divisor:1}}},filterCategoryValues:{size:s,accessor:"getFilterCategory",transform:s===1?l=>t._getCategoryKey.call(this,l,0):l=>l.map((f,c)=>t._getCategoryKey.call(this,f,c)),shaderAttributes:{filterCategoryValues:{divisor:0},instanceFilterCategoryValues:{divisor:1}}}});let{device:a}=this.context;if(i&&t.opts.countItems){let l=qe(a);i.add({filterIndices:{size:l?1:2,vertexOffset:1,type:"unorm8",accessor:(u,{index:_})=>{let p=u&&u.__source?u.__source.index:_;return l?(p+1)%255:[(p+1)%255,Math.floor(p/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});let f=We(a,l),c=He(a,t.getShaders.call(this,t),l);this.setState({filterFBO:f,filterModel:c})}}updateState({props:e,oldProps:t,changeFlags:i},s){let o=this.getAttributeManager(),{categorySize:n}=s.opts;if(this.state.filterModel){let a=o.attributes.filterValues.needsUpdate()||o.attributes.filterCategoryValues?.needsUpdate()||e.filterEnabled!==t.filterEnabled||e.filterRange!==t.filterRange||e.filterSoftRange!==t.filterSoftRange||e.filterCategories!==t.filterCategories;a&&this.setState({filterNeedsUpdate:a})}if(o?.attributes.filterCategoryValues){let a=o.attributes.filterCategoryValues.needsUpdate()||!(0,b._deepEqual)(e.filterCategories,t.filterCategories,2);a&&this.setState({categoryBitMaskNeedsUpdate:a}),i.dataChanged&&(this.setState({categoryMap:Array(n).fill(0).map(()=>({}))}),o.attributes.filterCategoryValues.setNeedsUpdate("categoryMap"))}}draw(e,t){let i=this.state.filterFBO,s=this.state.filterModel,o=this.state.filterNeedsUpdate,n=this.state.categoryBitMaskNeedsUpdate,{onFilteredItemsChange:a}=this.props;if(n&&t._updateCategoryBitMask.call(this,e,t),o&&a&&s){let{attributes:{filterValues:l,filterCategoryValues:f,filterIndices:c}}=this.getAttributeManager();s.setVertexCount(this.getNumInstances()),this.context.device.clearWebGL({framebuffer:i,color:[0,0,0,0]}),s.updateModuleSettings(e.moduleParameters),s.setAttributes({...l.getValue(),...f?.getValue(),...c?.getValue()}),s.setUniforms(e.uniforms),s.device.withParametersWebGL({framebuffer:i,...Ye,viewport:[0,0,i.width,i.height]},()=>{s.draw(this.context.renderPass)});let u=s.device.readPixelsToArrayWebGL(i),_=0;for(let p=0;p<u.length;p++)_+=u[p];a({id:this.id,count:_}),this.state.filterNeedsUpdate=!1}}finalizeState(){let e=this.state.filterFBO,t=this.state.filterModel;e?.destroy(),t?.destroy()}_updateCategoryBitMask(e,t){let{categorySize:i}=t.opts,{filterCategories:s}=this.props,o=new Uint32Array([0,0,0,0]),n=i===1?[s]:s,a=i===1?128:i===2?64:32;for(let l=0;l<n.length;l++){let f=n[l];for(let c of f){let u=t._getCategoryKey.call(this,c,l);if(u<a){let _=l*(a/32)+Math.floor(u/32);o[_]+=Math.pow(2,u%32)}else b.log.warn(`Exceeded maximum number of categories (${a})`)()}}e.uniforms.filter_categoryBitMask=o,this.state.categoryBitMaskNeedsUpdate=!1}_getCategoryKey(e,t){let i=this.state.categoryMap[t];return e in i||(i[e]=Object.keys(i).length),i[e]}},O=Q;(()=>{Q.defaultProps=Yt})(),(()=>{Q.extensionName="DataFilterExtension"})();var C=d(m(),1);function J(r,e=[],t=0){let i=Math.fround(r),s=r-i;return e[t]=i,e[t+1]=s,e}function xe(r){return r-Math.fround(r)}function Pe(r){let e=new Float32Array(32);for(let t=0;t<4;++t)for(let i=0;i<4;++i){let s=t*4+i;J(r[i*4+t],e,s*2)}return e}var Ze=`uniform float ONE;
|
|
227
209
|
vec2 split(float a) {
|
|
228
|
-
|
|
229
|
-
|
|
210
|
+
const float SPLIT = 4097.0;
|
|
211
|
+
float t = a * SPLIT;
|
|
230
212
|
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
231
|
-
|
|
232
|
-
|
|
213
|
+
float a_hi = t * ONE - (t - a);
|
|
214
|
+
float a_lo = a * ONE - a_hi;
|
|
233
215
|
#else
|
|
234
|
-
|
|
235
|
-
|
|
216
|
+
float a_hi = t - (t - a);
|
|
217
|
+
float a_lo = a - a_hi;
|
|
236
218
|
#endif
|
|
237
|
-
|
|
219
|
+
return vec2(a_hi, a_lo);
|
|
238
220
|
}
|
|
239
|
-
|
|
240
|
-
// Divide float number again when high float uses too many fraction bits
|
|
241
221
|
vec2 split2(vec2 a) {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
222
|
+
vec2 b = split(a.x);
|
|
223
|
+
b.y += a.y;
|
|
224
|
+
return b;
|
|
245
225
|
}
|
|
246
|
-
|
|
247
|
-
// Special sum operation when a > b
|
|
248
226
|
vec2 quickTwoSum(float a, float b) {
|
|
249
227
|
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
250
|
-
|
|
251
|
-
|
|
228
|
+
float sum = (a + b) * ONE;
|
|
229
|
+
float err = b - (sum - a) * ONE;
|
|
252
230
|
#else
|
|
253
|
-
|
|
254
|
-
|
|
231
|
+
float sum = a + b;
|
|
232
|
+
float err = b - (sum - a);
|
|
255
233
|
#endif
|
|
256
|
-
|
|
234
|
+
return vec2(sum, err);
|
|
257
235
|
}
|
|
258
|
-
|
|
259
|
-
// General sum operation
|
|
260
236
|
vec2 twoSum(float a, float b) {
|
|
261
|
-
|
|
237
|
+
float s = (a + b);
|
|
262
238
|
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
263
|
-
|
|
264
|
-
|
|
239
|
+
float v = (s * ONE - a) * ONE;
|
|
240
|
+
float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);
|
|
265
241
|
#else
|
|
266
|
-
|
|
267
|
-
|
|
242
|
+
float v = s - a;
|
|
243
|
+
float err = (a - (s - v)) + (b - v);
|
|
268
244
|
#endif
|
|
269
|
-
|
|
245
|
+
return vec2(s, err);
|
|
270
246
|
}
|
|
271
|
-
|
|
272
247
|
vec2 twoSub(float a, float b) {
|
|
273
|
-
|
|
248
|
+
float s = (a - b);
|
|
274
249
|
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
275
|
-
|
|
276
|
-
|
|
250
|
+
float v = (s * ONE - a) * ONE;
|
|
251
|
+
float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);
|
|
277
252
|
#else
|
|
278
|
-
|
|
279
|
-
|
|
253
|
+
float v = s - a;
|
|
254
|
+
float err = (a - (s - v)) - (b + v);
|
|
280
255
|
#endif
|
|
281
|
-
|
|
256
|
+
return vec2(s, err);
|
|
282
257
|
}
|
|
283
|
-
|
|
284
258
|
vec2 twoSqr(float a) {
|
|
285
|
-
|
|
286
|
-
|
|
259
|
+
float prod = a * a;
|
|
260
|
+
vec2 a_fp64 = split(a);
|
|
287
261
|
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
288
|
-
|
|
289
|
-
|
|
262
|
+
float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *
|
|
263
|
+
a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;
|
|
290
264
|
#else
|
|
291
|
-
|
|
265
|
+
float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;
|
|
292
266
|
#endif
|
|
293
|
-
|
|
267
|
+
return vec2(prod, err);
|
|
294
268
|
}
|
|
295
|
-
|
|
296
269
|
vec2 twoProd(float a, float b) {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
270
|
+
float prod = a * b;
|
|
271
|
+
vec2 a_fp64 = split(a);
|
|
272
|
+
vec2 b_fp64 = split(b);
|
|
273
|
+
float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +
|
|
274
|
+
a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;
|
|
275
|
+
return vec2(prod, err);
|
|
303
276
|
}
|
|
304
|
-
|
|
305
277
|
vec2 sum_fp64(vec2 a, vec2 b) {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
278
|
+
vec2 s, t;
|
|
279
|
+
s = twoSum(a.x, b.x);
|
|
280
|
+
t = twoSum(a.y, b.y);
|
|
281
|
+
s.y += t.x;
|
|
282
|
+
s = quickTwoSum(s.x, s.y);
|
|
283
|
+
s.y += t.y;
|
|
284
|
+
s = quickTwoSum(s.x, s.y);
|
|
285
|
+
return s;
|
|
314
286
|
}
|
|
315
|
-
|
|
316
287
|
vec2 sub_fp64(vec2 a, vec2 b) {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
288
|
+
vec2 s, t;
|
|
289
|
+
s = twoSub(a.x, b.x);
|
|
290
|
+
t = twoSub(a.y, b.y);
|
|
291
|
+
s.y += t.x;
|
|
292
|
+
s = quickTwoSum(s.x, s.y);
|
|
293
|
+
s.y += t.y;
|
|
294
|
+
s = quickTwoSum(s.x, s.y);
|
|
295
|
+
return s;
|
|
325
296
|
}
|
|
326
|
-
|
|
327
297
|
vec2 mul_fp64(vec2 a, vec2 b) {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
prod.y += a.x * b.y;
|
|
298
|
+
vec2 prod = twoProd(a.x, b.x);
|
|
299
|
+
prod.y += a.x * b.y;
|
|
331
300
|
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
|
332
|
-
|
|
301
|
+
prod = split2(prod);
|
|
333
302
|
#endif
|
|
334
|
-
|
|
335
|
-
|
|
303
|
+
prod = quickTwoSum(prod.x, prod.y);
|
|
304
|
+
prod.y += a.y * b.x;
|
|
336
305
|
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
|
337
|
-
|
|
306
|
+
prod = split2(prod);
|
|
338
307
|
#endif
|
|
339
|
-
|
|
340
|
-
|
|
308
|
+
prod = quickTwoSum(prod.x, prod.y);
|
|
309
|
+
return prod;
|
|
341
310
|
}
|
|
342
|
-
|
|
343
311
|
vec2 div_fp64(vec2 a, vec2 b) {
|
|
344
|
-
|
|
312
|
+
float xn = 1.0 / b.x;
|
|
345
313
|
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
|
346
|
-
|
|
314
|
+
vec2 yn = mul_fp64(a, vec2(xn, 0));
|
|
347
315
|
#else
|
|
348
|
-
|
|
316
|
+
vec2 yn = a * xn;
|
|
349
317
|
#endif
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
318
|
+
float diff = (sub_fp64(a, mul_fp64(b, yn))).x;
|
|
319
|
+
vec2 prod = twoProd(xn, diff);
|
|
320
|
+
return sum_fp64(yn, prod);
|
|
353
321
|
}
|
|
354
|
-
|
|
355
322
|
vec2 sqrt_fp64(vec2 a) {
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
float yn = a.x * x;
|
|
323
|
+
if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);
|
|
324
|
+
if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
|
|
325
|
+
float x = 1.0 / sqrt(a.x);
|
|
326
|
+
float yn = a.x * x;
|
|
361
327
|
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
|
362
|
-
|
|
328
|
+
vec2 yn_sqr = twoSqr(yn) * ONE;
|
|
363
329
|
#else
|
|
364
|
-
|
|
330
|
+
vec2 yn_sqr = twoSqr(yn);
|
|
365
331
|
#endif
|
|
366
|
-
|
|
367
|
-
|
|
332
|
+
float diff = sub_fp64(a, yn_sqr).x;
|
|
333
|
+
vec2 prod = twoProd(x * 0.5, diff);
|
|
368
334
|
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
|
369
|
-
|
|
335
|
+
return sum_fp64(split(yn), prod);
|
|
370
336
|
#else
|
|
371
|
-
|
|
337
|
+
return sum_fp64(vec2(yn, 0.0), prod);
|
|
372
338
|
#endif
|
|
373
339
|
}
|
|
374
|
-
`;var
|
|
375
|
-
const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
|
|
340
|
+
`;var $e=`const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
|
|
376
341
|
const vec2 LOG2_FP64 = vec2(0.6931471824645996e+00, -1.9046542121259336e-09);
|
|
377
342
|
const vec2 PI_FP64 = vec2(3.1415927410125732, -8.742278012618954e-8);
|
|
378
343
|
const vec2 TWO_PI_FP64 = vec2(6.2831854820251465, -1.7484556025237907e-7);
|
|
@@ -382,666 +347,510 @@ const vec2 PI_16_FP64 = vec2(0.19634954631328583, -5.463923757886846e-9);
|
|
|
382
347
|
const vec2 PI_16_2_FP64 = vec2(0.39269909262657166, -1.0927847515773692e-8);
|
|
383
348
|
const vec2 PI_16_3_FP64 = vec2(0.5890486240386963, -1.4906100798128818e-9);
|
|
384
349
|
const vec2 PI_180_FP64 = vec2(0.01745329238474369, 1.3519960498364902e-10);
|
|
385
|
-
|
|
386
350
|
const vec2 SIN_TABLE_0_FP64 = vec2(0.19509032368659973, -1.6704714833615242e-9);
|
|
387
351
|
const vec2 SIN_TABLE_1_FP64 = vec2(0.3826834261417389, 6.22335089017767e-9);
|
|
388
352
|
const vec2 SIN_TABLE_2_FP64 = vec2(0.5555702447891235, -1.1769521357507529e-8);
|
|
389
353
|
const vec2 SIN_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617041793133e-8);
|
|
390
|
-
|
|
391
354
|
const vec2 COS_TABLE_0_FP64 = vec2(0.9807852506637573, 2.9739473106360492e-8);
|
|
392
355
|
const vec2 COS_TABLE_1_FP64 = vec2(0.9238795042037964, 2.8307490351764386e-8);
|
|
393
356
|
const vec2 COS_TABLE_2_FP64 = vec2(0.8314695954322815, 1.6870263741530778e-8);
|
|
394
357
|
const vec2 COS_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617152815436e-8);
|
|
395
|
-
|
|
396
|
-
const vec2
|
|
397
|
-
const vec2
|
|
398
|
-
const vec2
|
|
399
|
-
const vec2
|
|
400
|
-
const vec2
|
|
401
|
-
const vec2
|
|
402
|
-
const vec2
|
|
403
|
-
const vec2 INVERSE_FACTORIAL_10_FP64 = vec2(2.755731998149713e-07, -7.575112367869873e-15); // 1/10!
|
|
404
|
-
|
|
358
|
+
const vec2 INVERSE_FACTORIAL_3_FP64 = vec2(1.666666716337204e-01, -4.967053879312289e-09);
|
|
359
|
+
const vec2 INVERSE_FACTORIAL_4_FP64 = vec2(4.16666679084301e-02, -1.2417634698280722e-09);
|
|
360
|
+
const vec2 INVERSE_FACTORIAL_5_FP64 = vec2(8.333333767950535e-03, -4.34617203337595e-10);
|
|
361
|
+
const vec2 INVERSE_FACTORIAL_6_FP64 = vec2(1.3888889225199819e-03, -3.3631094437103215e-11);
|
|
362
|
+
const vec2 INVERSE_FACTORIAL_7_FP64 = vec2(1.9841270113829523e-04, -2.725596874933456e-12);
|
|
363
|
+
const vec2 INVERSE_FACTORIAL_8_FP64 = vec2(2.4801587642286904e-05, -3.406996025904184e-13);
|
|
364
|
+
const vec2 INVERSE_FACTORIAL_9_FP64 = vec2(2.75573188446287533e-06, 3.7935713937038186e-14);
|
|
365
|
+
const vec2 INVERSE_FACTORIAL_10_FP64 = vec2(2.755731998149713e-07, -7.575112367869873e-15);
|
|
405
366
|
float nint(float d) {
|
|
406
|
-
|
|
407
|
-
|
|
367
|
+
if (d == floor(d)) return d;
|
|
368
|
+
return floor(d + 0.5);
|
|
408
369
|
}
|
|
409
|
-
|
|
410
370
|
vec2 nint_fp64(vec2 a) {
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
371
|
+
float hi = nint(a.x);
|
|
372
|
+
float lo;
|
|
373
|
+
vec2 tmp;
|
|
374
|
+
if (hi == a.x) {
|
|
375
|
+
lo = nint(a.y);
|
|
376
|
+
tmp = quickTwoSum(hi, lo);
|
|
377
|
+
} else {
|
|
378
|
+
lo = 0.0;
|
|
379
|
+
if (abs(hi - a.x) == 0.5 && a.y < 0.0) {
|
|
380
|
+
hi -= 1.0;
|
|
381
|
+
}
|
|
382
|
+
tmp = vec2(hi, lo);
|
|
383
|
+
}
|
|
384
|
+
return tmp;
|
|
425
385
|
}
|
|
426
|
-
|
|
427
|
-
/* k_power controls how much range reduction we would like to have
|
|
428
|
-
Range reduction uses the following method:
|
|
429
|
-
assume a = k_power * r + m * log(2), k and m being integers.
|
|
430
|
-
Set k_power = 4 (we can choose other k to trade accuracy with performance.
|
|
431
|
-
we only need to calculate exp(r) and using exp(a) = 2^m * exp(r)^k_power;
|
|
432
|
-
*/
|
|
433
|
-
|
|
434
386
|
vec2 exp_fp64(vec2 a) {
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
s = sum_fp64(s, t);
|
|
461
|
-
p = mul_fp64(p, r);
|
|
462
|
-
t = mul_fp64(p, INVERSE_FACTORIAL_5_FP64);
|
|
463
|
-
|
|
464
|
-
// s = sum_fp64(s, t);
|
|
465
|
-
// p = mul_fp64(p, r);
|
|
466
|
-
// t = mul_fp64(p, INVERSE_FACTORIAL_6_FP64);
|
|
467
|
-
|
|
468
|
-
// s = sum_fp64(s, t);
|
|
469
|
-
// p = mul_fp64(p, r);
|
|
470
|
-
// t = mul_fp64(p, INVERSE_FACTORIAL_7_FP64);
|
|
471
|
-
|
|
472
|
-
s = sum_fp64(s, t);
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
// At this point, s = exp(r) - 1; but after following 4 recursions, we will get exp(r) ^ 512 - 1.
|
|
476
|
-
for (int i = 0; i < k_power; i++) {
|
|
477
|
-
s = sum_fp64(s * 2.0, mul_fp64(s, s));
|
|
478
|
-
}
|
|
479
|
-
|
|
387
|
+
const int k_power = 4;
|
|
388
|
+
const float k = 16.0;
|
|
389
|
+
const float inv_k = 1.0 / k;
|
|
390
|
+
if (a.x <= -88.0) return vec2(0.0, 0.0);
|
|
391
|
+
if (a.x >= 88.0) return vec2(1.0 / 0.0, 1.0 / 0.0);
|
|
392
|
+
if (a.x == 0.0 && a.y == 0.0) return vec2(1.0, 0.0);
|
|
393
|
+
if (a.x == 1.0 && a.y == 0.0) return E_FP64;
|
|
394
|
+
float m = floor(a.x / LOG2_FP64.x + 0.5);
|
|
395
|
+
vec2 r = sub_fp64(a, mul_fp64(LOG2_FP64, vec2(m, 0.0))) * inv_k;
|
|
396
|
+
vec2 s, t, p;
|
|
397
|
+
p = mul_fp64(r, r);
|
|
398
|
+
s = sum_fp64(r, p * 0.5);
|
|
399
|
+
p = mul_fp64(p, r);
|
|
400
|
+
t = mul_fp64(p, INVERSE_FACTORIAL_3_FP64);
|
|
401
|
+
s = sum_fp64(s, t);
|
|
402
|
+
p = mul_fp64(p, r);
|
|
403
|
+
t = mul_fp64(p, INVERSE_FACTORIAL_4_FP64);
|
|
404
|
+
s = sum_fp64(s, t);
|
|
405
|
+
p = mul_fp64(p, r);
|
|
406
|
+
t = mul_fp64(p, INVERSE_FACTORIAL_5_FP64);
|
|
407
|
+
s = sum_fp64(s, t);
|
|
408
|
+
for (int i = 0; i < k_power; i++) {
|
|
409
|
+
s = sum_fp64(s * 2.0, mul_fp64(s, s));
|
|
410
|
+
}
|
|
480
411
|
#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
|
|
481
|
-
|
|
412
|
+
s = sum_fp64(s, vec2(ONE, 0.0));
|
|
482
413
|
#else
|
|
483
|
-
|
|
414
|
+
s = sum_fp64(s, vec2(1.0, 0.0));
|
|
484
415
|
#endif
|
|
485
|
-
|
|
486
|
-
return s * pow(2.0, m);
|
|
487
|
-
// return r;
|
|
416
|
+
return s * pow(2.0, m);
|
|
488
417
|
}
|
|
489
|
-
|
|
490
418
|
vec2 log_fp64(vec2 a)
|
|
491
419
|
{
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
420
|
+
if (a.x == 1.0 && a.y == 0.0) return vec2(0.0, 0.0);
|
|
421
|
+
if (a.x <= 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
|
|
422
|
+
vec2 x = vec2(log(a.x), 0.0);
|
|
423
|
+
vec2 s;
|
|
496
424
|
#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
|
|
497
|
-
|
|
425
|
+
s = vec2(ONE, 0.0);
|
|
498
426
|
#else
|
|
499
|
-
|
|
427
|
+
s = vec2(1.0, 0.0);
|
|
500
428
|
#endif
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
return x;
|
|
429
|
+
x = sub_fp64(sum_fp64(x, mul_fp64(a, exp_fp64(-x))), s);
|
|
430
|
+
return x;
|
|
504
431
|
}
|
|
505
|
-
|
|
506
432
|
vec2 sin_taylor_fp64(vec2 a) {
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
r = mul_fp64(r, x);
|
|
522
|
-
t = mul_fp64(r, INVERSE_FACTORIAL_5_FP64);
|
|
523
|
-
s = sum_fp64(s, t);
|
|
524
|
-
|
|
525
|
-
/* keep the following commented code in case we need them
|
|
526
|
-
for extra accuracy from the Taylor expansion*/
|
|
527
|
-
|
|
528
|
-
// r = mul_fp64(r, x);
|
|
529
|
-
// t = mul_fp64(r, INVERSE_FACTORIAL_7_FP64);
|
|
530
|
-
// s = sum_fp64(s, t);
|
|
531
|
-
|
|
532
|
-
// r = mul_fp64(r, x);
|
|
533
|
-
// t = mul_fp64(r, INVERSE_FACTORIAL_9_FP64);
|
|
534
|
-
// s = sum_fp64(s, t);
|
|
535
|
-
|
|
536
|
-
return s;
|
|
433
|
+
vec2 r, s, t, x;
|
|
434
|
+
if (a.x == 0.0 && a.y == 0.0) {
|
|
435
|
+
return vec2(0.0, 0.0);
|
|
436
|
+
}
|
|
437
|
+
x = -mul_fp64(a, a);
|
|
438
|
+
s = a;
|
|
439
|
+
r = a;
|
|
440
|
+
r = mul_fp64(r, x);
|
|
441
|
+
t = mul_fp64(r, INVERSE_FACTORIAL_3_FP64);
|
|
442
|
+
s = sum_fp64(s, t);
|
|
443
|
+
r = mul_fp64(r, x);
|
|
444
|
+
t = mul_fp64(r, INVERSE_FACTORIAL_5_FP64);
|
|
445
|
+
s = sum_fp64(s, t);
|
|
446
|
+
return s;
|
|
537
447
|
}
|
|
538
|
-
|
|
539
448
|
vec2 cos_taylor_fp64(vec2 a) {
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
r = mul_fp64(r, x);
|
|
555
|
-
t = mul_fp64(r, INVERSE_FACTORIAL_6_FP64);
|
|
556
|
-
s = sum_fp64(s, t);
|
|
557
|
-
|
|
558
|
-
/* keep the following commented code in case we need them
|
|
559
|
-
for extra accuracy from the Taylor expansion*/
|
|
560
|
-
|
|
561
|
-
// r = mul_fp64(r, x);
|
|
562
|
-
// t = mul_fp64(r, INVERSE_FACTORIAL_8_FP64);
|
|
563
|
-
// s = sum_fp64(s, t);
|
|
564
|
-
|
|
565
|
-
// r = mul_fp64(r, x);
|
|
566
|
-
// t = mul_fp64(r, INVERSE_FACTORIAL_10_FP64);
|
|
567
|
-
// s = sum_fp64(s, t);
|
|
568
|
-
|
|
569
|
-
return s;
|
|
449
|
+
vec2 r, s, t, x;
|
|
450
|
+
if (a.x == 0.0 && a.y == 0.0) {
|
|
451
|
+
return vec2(1.0, 0.0);
|
|
452
|
+
}
|
|
453
|
+
x = -mul_fp64(a, a);
|
|
454
|
+
r = x;
|
|
455
|
+
s = sum_fp64(vec2(1.0, 0.0), r * 0.5);
|
|
456
|
+
r = mul_fp64(r, x);
|
|
457
|
+
t = mul_fp64(r, INVERSE_FACTORIAL_4_FP64);
|
|
458
|
+
s = sum_fp64(s, t);
|
|
459
|
+
r = mul_fp64(r, x);
|
|
460
|
+
t = mul_fp64(r, INVERSE_FACTORIAL_6_FP64);
|
|
461
|
+
s = sum_fp64(s, t);
|
|
462
|
+
return s;
|
|
570
463
|
}
|
|
571
|
-
|
|
572
464
|
void sincos_taylor_fp64(vec2 a, out vec2 sin_t, out vec2 cos_t) {
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
cos_t = sqrt_fp64(sub_fp64(vec2(1.0, 0.0), mul_fp64(sin_t, sin_t)));
|
|
465
|
+
if (a.x == 0.0 && a.y == 0.0) {
|
|
466
|
+
sin_t = vec2(0.0, 0.0);
|
|
467
|
+
cos_t = vec2(1.0, 0.0);
|
|
468
|
+
}
|
|
469
|
+
sin_t = sin_taylor_fp64(a);
|
|
470
|
+
cos_t = sqrt_fp64(sub_fp64(vec2(1.0, 0.0), mul_fp64(sin_t, sin_t)));
|
|
580
471
|
}
|
|
581
|
-
|
|
582
472
|
vec2 sin_fp64(vec2 a) {
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
int abs_k = int(abs(float(k)));
|
|
617
|
-
|
|
618
|
-
if (abs_k > 4) {
|
|
619
|
-
return vec2(0.0 / 0.0, 0.0 / 0.0);
|
|
620
|
-
} else {
|
|
621
|
-
t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
|
|
622
|
-
}
|
|
623
|
-
|
|
624
|
-
vec2 u = vec2(0.0, 0.0);
|
|
625
|
-
vec2 v = vec2(0.0, 0.0);
|
|
626
|
-
|
|
473
|
+
if (a.x == 0.0 && a.y == 0.0) {
|
|
474
|
+
return vec2(0.0, 0.0);
|
|
475
|
+
}
|
|
476
|
+
vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
|
|
477
|
+
vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
|
|
478
|
+
vec2 t;
|
|
479
|
+
float q = floor(r.x / PI_2_FP64.x + 0.5);
|
|
480
|
+
int j = int(q);
|
|
481
|
+
if (j < -2 || j > 2) {
|
|
482
|
+
return vec2(0.0 / 0.0, 0.0 / 0.0);
|
|
483
|
+
}
|
|
484
|
+
t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
|
|
485
|
+
q = floor(t.x / PI_16_FP64.x + 0.5);
|
|
486
|
+
int k = int(q);
|
|
487
|
+
if (k == 0) {
|
|
488
|
+
if (j == 0) {
|
|
489
|
+
return sin_taylor_fp64(t);
|
|
490
|
+
} else if (j == 1) {
|
|
491
|
+
return cos_taylor_fp64(t);
|
|
492
|
+
} else if (j == -1) {
|
|
493
|
+
return -cos_taylor_fp64(t);
|
|
494
|
+
} else {
|
|
495
|
+
return -sin_taylor_fp64(t);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
int abs_k = int(abs(float(k)));
|
|
499
|
+
if (abs_k > 4) {
|
|
500
|
+
return vec2(0.0 / 0.0, 0.0 / 0.0);
|
|
501
|
+
} else {
|
|
502
|
+
t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
|
|
503
|
+
}
|
|
504
|
+
vec2 u = vec2(0.0, 0.0);
|
|
505
|
+
vec2 v = vec2(0.0, 0.0);
|
|
627
506
|
#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
507
|
+
if (abs(float(abs_k) - 1.0) < 0.5) {
|
|
508
|
+
u = COS_TABLE_0_FP64;
|
|
509
|
+
v = SIN_TABLE_0_FP64;
|
|
510
|
+
} else if (abs(float(abs_k) - 2.0) < 0.5) {
|
|
511
|
+
u = COS_TABLE_1_FP64;
|
|
512
|
+
v = SIN_TABLE_1_FP64;
|
|
513
|
+
} else if (abs(float(abs_k) - 3.0) < 0.5) {
|
|
514
|
+
u = COS_TABLE_2_FP64;
|
|
515
|
+
v = SIN_TABLE_2_FP64;
|
|
516
|
+
} else if (abs(float(abs_k) - 4.0) < 0.5) {
|
|
517
|
+
u = COS_TABLE_3_FP64;
|
|
518
|
+
v = SIN_TABLE_3_FP64;
|
|
519
|
+
}
|
|
641
520
|
#else
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
521
|
+
if (abs_k == 1) {
|
|
522
|
+
u = COS_TABLE_0_FP64;
|
|
523
|
+
v = SIN_TABLE_0_FP64;
|
|
524
|
+
} else if (abs_k == 2) {
|
|
525
|
+
u = COS_TABLE_1_FP64;
|
|
526
|
+
v = SIN_TABLE_1_FP64;
|
|
527
|
+
} else if (abs_k == 3) {
|
|
528
|
+
u = COS_TABLE_2_FP64;
|
|
529
|
+
v = SIN_TABLE_2_FP64;
|
|
530
|
+
} else if (abs_k == 4) {
|
|
531
|
+
u = COS_TABLE_3_FP64;
|
|
532
|
+
v = SIN_TABLE_3_FP64;
|
|
533
|
+
}
|
|
655
534
|
#endif
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
|
|
686
|
-
}
|
|
687
|
-
}
|
|
688
|
-
|
|
689
|
-
return result;
|
|
535
|
+
vec2 sin_t, cos_t;
|
|
536
|
+
sincos_taylor_fp64(t, sin_t, cos_t);
|
|
537
|
+
vec2 result = vec2(0.0, 0.0);
|
|
538
|
+
if (j == 0) {
|
|
539
|
+
if (k > 0) {
|
|
540
|
+
result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
|
|
541
|
+
} else {
|
|
542
|
+
result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
|
|
543
|
+
}
|
|
544
|
+
} else if (j == 1) {
|
|
545
|
+
if (k > 0) {
|
|
546
|
+
result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
|
|
547
|
+
} else {
|
|
548
|
+
result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
|
|
549
|
+
}
|
|
550
|
+
} else if (j == -1) {
|
|
551
|
+
if (k > 0) {
|
|
552
|
+
result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
|
|
553
|
+
} else {
|
|
554
|
+
result = -sum_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
|
|
555
|
+
}
|
|
556
|
+
} else {
|
|
557
|
+
if (k > 0) {
|
|
558
|
+
result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
|
|
559
|
+
} else {
|
|
560
|
+
result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
return result;
|
|
690
564
|
}
|
|
691
|
-
|
|
692
565
|
vec2 cos_fp64(vec2 a) {
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
int abs_k = int(abs(float(k)));
|
|
727
|
-
|
|
728
|
-
if (abs_k > 4) {
|
|
729
|
-
return vec2(0.0 / 0.0, 0.0 / 0.0);
|
|
730
|
-
} else {
|
|
731
|
-
t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
vec2 u = vec2(0.0, 0.0);
|
|
735
|
-
vec2 v = vec2(0.0, 0.0);
|
|
736
|
-
|
|
566
|
+
if (a.x == 0.0 && a.y == 0.0) {
|
|
567
|
+
return vec2(1.0, 0.0);
|
|
568
|
+
}
|
|
569
|
+
vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
|
|
570
|
+
vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
|
|
571
|
+
vec2 t;
|
|
572
|
+
float q = floor(r.x / PI_2_FP64.x + 0.5);
|
|
573
|
+
int j = int(q);
|
|
574
|
+
if (j < -2 || j > 2) {
|
|
575
|
+
return vec2(0.0 / 0.0, 0.0 / 0.0);
|
|
576
|
+
}
|
|
577
|
+
t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
|
|
578
|
+
q = floor(t.x / PI_16_FP64.x + 0.5);
|
|
579
|
+
int k = int(q);
|
|
580
|
+
if (k == 0) {
|
|
581
|
+
if (j == 0) {
|
|
582
|
+
return cos_taylor_fp64(t);
|
|
583
|
+
} else if (j == 1) {
|
|
584
|
+
return -sin_taylor_fp64(t);
|
|
585
|
+
} else if (j == -1) {
|
|
586
|
+
return sin_taylor_fp64(t);
|
|
587
|
+
} else {
|
|
588
|
+
return -cos_taylor_fp64(t);
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
int abs_k = int(abs(float(k)));
|
|
592
|
+
if (abs_k > 4) {
|
|
593
|
+
return vec2(0.0 / 0.0, 0.0 / 0.0);
|
|
594
|
+
} else {
|
|
595
|
+
t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
|
|
596
|
+
}
|
|
597
|
+
vec2 u = vec2(0.0, 0.0);
|
|
598
|
+
vec2 v = vec2(0.0, 0.0);
|
|
737
599
|
#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
600
|
+
if (abs(float(abs_k) - 1.0) < 0.5) {
|
|
601
|
+
u = COS_TABLE_0_FP64;
|
|
602
|
+
v = SIN_TABLE_0_FP64;
|
|
603
|
+
} else if (abs(float(abs_k) - 2.0) < 0.5) {
|
|
604
|
+
u = COS_TABLE_1_FP64;
|
|
605
|
+
v = SIN_TABLE_1_FP64;
|
|
606
|
+
} else if (abs(float(abs_k) - 3.0) < 0.5) {
|
|
607
|
+
u = COS_TABLE_2_FP64;
|
|
608
|
+
v = SIN_TABLE_2_FP64;
|
|
609
|
+
} else if (abs(float(abs_k) - 4.0) < 0.5) {
|
|
610
|
+
u = COS_TABLE_3_FP64;
|
|
611
|
+
v = SIN_TABLE_3_FP64;
|
|
612
|
+
}
|
|
751
613
|
#else
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
614
|
+
if (abs_k == 1) {
|
|
615
|
+
u = COS_TABLE_0_FP64;
|
|
616
|
+
v = SIN_TABLE_0_FP64;
|
|
617
|
+
} else if (abs_k == 2) {
|
|
618
|
+
u = COS_TABLE_1_FP64;
|
|
619
|
+
v = SIN_TABLE_1_FP64;
|
|
620
|
+
} else if (abs_k == 3) {
|
|
621
|
+
u = COS_TABLE_2_FP64;
|
|
622
|
+
v = SIN_TABLE_2_FP64;
|
|
623
|
+
} else if (abs_k == 4) {
|
|
624
|
+
u = COS_TABLE_3_FP64;
|
|
625
|
+
v = SIN_TABLE_3_FP64;
|
|
626
|
+
}
|
|
765
627
|
#endif
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
}
|
|
796
|
-
|
|
797
|
-
return result;
|
|
628
|
+
vec2 sin_t, cos_t;
|
|
629
|
+
sincos_taylor_fp64(t, sin_t, cos_t);
|
|
630
|
+
vec2 result = vec2(0.0, 0.0);
|
|
631
|
+
if (j == 0) {
|
|
632
|
+
if (k > 0) {
|
|
633
|
+
result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
|
|
634
|
+
} else {
|
|
635
|
+
result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
|
|
636
|
+
}
|
|
637
|
+
} else if (j == 1) {
|
|
638
|
+
if (k > 0) {
|
|
639
|
+
result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
|
|
640
|
+
} else {
|
|
641
|
+
result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
|
|
642
|
+
}
|
|
643
|
+
} else if (j == -1) {
|
|
644
|
+
if (k > 0) {
|
|
645
|
+
result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
|
|
646
|
+
} else {
|
|
647
|
+
result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
|
|
648
|
+
}
|
|
649
|
+
} else {
|
|
650
|
+
if (k > 0) {
|
|
651
|
+
result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
|
|
652
|
+
} else {
|
|
653
|
+
result = -sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
return result;
|
|
798
657
|
}
|
|
799
|
-
|
|
800
658
|
vec2 tan_fp64(vec2 a) {
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
|
|
833
|
-
}
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
vec2 u = vec2(0.0, 0.0);
|
|
837
|
-
vec2 v = vec2(0.0, 0.0);
|
|
838
|
-
|
|
839
|
-
vec2 sin_t, cos_t;
|
|
840
|
-
vec2 s, c;
|
|
841
|
-
sincos_taylor_fp64(t, sin_t, cos_t);
|
|
842
|
-
|
|
843
|
-
if (k == 0) {
|
|
844
|
-
s = sin_t;
|
|
845
|
-
c = cos_t;
|
|
846
|
-
} else {
|
|
659
|
+
vec2 sin_a;
|
|
660
|
+
vec2 cos_a;
|
|
661
|
+
if (a.x == 0.0 && a.y == 0.0) {
|
|
662
|
+
return vec2(0.0, 0.0);
|
|
663
|
+
}
|
|
664
|
+
vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
|
|
665
|
+
vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
|
|
666
|
+
vec2 t;
|
|
667
|
+
float q = floor(r.x / PI_2_FP64.x + 0.5);
|
|
668
|
+
int j = int(q);
|
|
669
|
+
if (j < -2 || j > 2) {
|
|
670
|
+
return vec2(0.0 / 0.0, 0.0 / 0.0);
|
|
671
|
+
}
|
|
672
|
+
t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
|
|
673
|
+
q = floor(t.x / PI_16_FP64.x + 0.5);
|
|
674
|
+
int k = int(q);
|
|
675
|
+
int abs_k = int(abs(float(k)));
|
|
676
|
+
if (abs_k > 4) {
|
|
677
|
+
return vec2(0.0 / 0.0, 0.0 / 0.0);
|
|
678
|
+
} else {
|
|
679
|
+
t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
|
|
680
|
+
}
|
|
681
|
+
vec2 u = vec2(0.0, 0.0);
|
|
682
|
+
vec2 v = vec2(0.0, 0.0);
|
|
683
|
+
vec2 sin_t, cos_t;
|
|
684
|
+
vec2 s, c;
|
|
685
|
+
sincos_taylor_fp64(t, sin_t, cos_t);
|
|
686
|
+
if (k == 0) {
|
|
687
|
+
s = sin_t;
|
|
688
|
+
c = cos_t;
|
|
689
|
+
} else {
|
|
847
690
|
#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
691
|
+
if (abs(float(abs_k) - 1.0) < 0.5) {
|
|
692
|
+
u = COS_TABLE_0_FP64;
|
|
693
|
+
v = SIN_TABLE_0_FP64;
|
|
694
|
+
} else if (abs(float(abs_k) - 2.0) < 0.5) {
|
|
695
|
+
u = COS_TABLE_1_FP64;
|
|
696
|
+
v = SIN_TABLE_1_FP64;
|
|
697
|
+
} else if (abs(float(abs_k) - 3.0) < 0.5) {
|
|
698
|
+
u = COS_TABLE_2_FP64;
|
|
699
|
+
v = SIN_TABLE_2_FP64;
|
|
700
|
+
} else if (abs(float(abs_k) - 4.0) < 0.5) {
|
|
701
|
+
u = COS_TABLE_3_FP64;
|
|
702
|
+
v = SIN_TABLE_3_FP64;
|
|
703
|
+
}
|
|
861
704
|
#else
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
705
|
+
if (abs_k == 1) {
|
|
706
|
+
u = COS_TABLE_0_FP64;
|
|
707
|
+
v = SIN_TABLE_0_FP64;
|
|
708
|
+
} else if (abs_k == 2) {
|
|
709
|
+
u = COS_TABLE_1_FP64;
|
|
710
|
+
v = SIN_TABLE_1_FP64;
|
|
711
|
+
} else if (abs_k == 3) {
|
|
712
|
+
u = COS_TABLE_2_FP64;
|
|
713
|
+
v = SIN_TABLE_2_FP64;
|
|
714
|
+
} else if (abs_k == 4) {
|
|
715
|
+
u = COS_TABLE_3_FP64;
|
|
716
|
+
v = SIN_TABLE_3_FP64;
|
|
717
|
+
}
|
|
875
718
|
#endif
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
return div_fp64(sin_a, cos_a);
|
|
719
|
+
if (k > 0) {
|
|
720
|
+
s = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
|
|
721
|
+
c = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
|
|
722
|
+
} else {
|
|
723
|
+
s = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
|
|
724
|
+
c = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
if (j == 0) {
|
|
728
|
+
sin_a = s;
|
|
729
|
+
cos_a = c;
|
|
730
|
+
} else if (j == 1) {
|
|
731
|
+
sin_a = c;
|
|
732
|
+
cos_a = -s;
|
|
733
|
+
} else if (j == -1) {
|
|
734
|
+
sin_a = -c;
|
|
735
|
+
cos_a = s;
|
|
736
|
+
} else {
|
|
737
|
+
sin_a = -s;
|
|
738
|
+
cos_a = -c;
|
|
739
|
+
}
|
|
740
|
+
return div_fp64(sin_a, cos_a);
|
|
899
741
|
}
|
|
900
|
-
|
|
901
742
|
vec2 radians_fp64(vec2 degree) {
|
|
902
|
-
|
|
743
|
+
return mul_fp64(degree, PI_180_FP64);
|
|
903
744
|
}
|
|
904
|
-
|
|
905
745
|
vec2 mix_fp64(vec2 a, vec2 b, float x) {
|
|
906
|
-
|
|
907
|
-
|
|
746
|
+
vec2 range = sub_fp64(b, a);
|
|
747
|
+
return sum_fp64(a, mul_fp64(range, vec2(x, 0.0)));
|
|
908
748
|
}
|
|
909
|
-
|
|
910
|
-
// Vector functions
|
|
911
|
-
// vec2 functions
|
|
912
749
|
void vec2_sum_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
|
|
913
|
-
|
|
914
|
-
|
|
750
|
+
out_val[0] = sum_fp64(a[0], b[0]);
|
|
751
|
+
out_val[1] = sum_fp64(a[1], b[1]);
|
|
915
752
|
}
|
|
916
|
-
|
|
917
753
|
void vec2_sub_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
|
|
918
|
-
|
|
919
|
-
|
|
754
|
+
out_val[0] = sub_fp64(a[0], b[0]);
|
|
755
|
+
out_val[1] = sub_fp64(a[1], b[1]);
|
|
920
756
|
}
|
|
921
|
-
|
|
922
757
|
void vec2_mul_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
|
|
923
|
-
|
|
924
|
-
|
|
758
|
+
out_val[0] = mul_fp64(a[0], b[0]);
|
|
759
|
+
out_val[1] = mul_fp64(a[1], b[1]);
|
|
925
760
|
}
|
|
926
|
-
|
|
927
761
|
void vec2_div_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
|
|
928
|
-
|
|
929
|
-
|
|
762
|
+
out_val[0] = div_fp64(a[0], b[0]);
|
|
763
|
+
out_val[1] = div_fp64(a[1], b[1]);
|
|
930
764
|
}
|
|
931
|
-
|
|
932
765
|
void vec2_mix_fp64(vec2 x[2], vec2 y[2], float a, out vec2 out_val[2]) {
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
766
|
+
vec2 range[2];
|
|
767
|
+
vec2_sub_fp64(y, x, range);
|
|
768
|
+
vec2 portion[2];
|
|
769
|
+
portion[0] = range[0] * a;
|
|
770
|
+
portion[1] = range[1] * a;
|
|
771
|
+
vec2_sum_fp64(x, portion, out_val);
|
|
939
772
|
}
|
|
940
|
-
|
|
941
773
|
vec2 vec2_length_fp64(vec2 x[2]) {
|
|
942
|
-
|
|
774
|
+
return sqrt_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])));
|
|
943
775
|
}
|
|
944
|
-
|
|
945
776
|
void vec2_normalize_fp64(vec2 x[2], out vec2 out_val[2]) {
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
vec2_div_fp64(x, length_vec2, out_val);
|
|
777
|
+
vec2 length = vec2_length_fp64(x);
|
|
778
|
+
vec2 length_vec2[2];
|
|
779
|
+
length_vec2[0] = length;
|
|
780
|
+
length_vec2[1] = length;
|
|
781
|
+
vec2_div_fp64(x, length_vec2, out_val);
|
|
952
782
|
}
|
|
953
|
-
|
|
954
783
|
vec2 vec2_distance_fp64(vec2 x[2], vec2 y[2]) {
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
784
|
+
vec2 diff[2];
|
|
785
|
+
vec2_sub_fp64(x, y, diff);
|
|
786
|
+
return vec2_length_fp64(diff);
|
|
958
787
|
}
|
|
959
|
-
|
|
960
788
|
vec2 vec2_dot_fp64(vec2 a[2], vec2 b[2]) {
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
return sum_fp64(v[0], v[1]);
|
|
789
|
+
vec2 v[2];
|
|
790
|
+
v[0] = mul_fp64(a[0], b[0]);
|
|
791
|
+
v[1] = mul_fp64(a[1], b[1]);
|
|
792
|
+
return sum_fp64(v[0], v[1]);
|
|
967
793
|
}
|
|
968
|
-
|
|
969
|
-
// vec3 functions
|
|
970
794
|
void vec3_sub_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
795
|
+
for (int i = 0; i < 3; i++) {
|
|
796
|
+
out_val[i] = sum_fp64(a[i], b[i]);
|
|
797
|
+
}
|
|
974
798
|
}
|
|
975
|
-
|
|
976
799
|
void vec3_sum_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
800
|
+
for (int i = 0; i < 3; i++) {
|
|
801
|
+
out_val[i] = sum_fp64(a[i], b[i]);
|
|
802
|
+
}
|
|
980
803
|
}
|
|
981
|
-
|
|
982
804
|
vec2 vec3_length_fp64(vec2 x[3]) {
|
|
983
|
-
|
|
984
|
-
|
|
805
|
+
return sqrt_fp64(sum_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])),
|
|
806
|
+
mul_fp64(x[2], x[2])));
|
|
985
807
|
}
|
|
986
|
-
|
|
987
808
|
vec2 vec3_distance_fp64(vec2 x[3], vec2 y[3]) {
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
809
|
+
vec2 diff[3];
|
|
810
|
+
vec3_sub_fp64(x, y, diff);
|
|
811
|
+
return vec3_length_fp64(diff);
|
|
991
812
|
}
|
|
992
|
-
|
|
993
|
-
// vec4 functions
|
|
994
813
|
void vec4_fp64(vec4 a, out vec2 out_val[4]) {
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
out_val[3].x = a[3];
|
|
1005
|
-
out_val[3].y = 0.0;
|
|
814
|
+
out_val[0].x = a[0];
|
|
815
|
+
out_val[0].y = 0.0;
|
|
816
|
+
out_val[1].x = a[1];
|
|
817
|
+
out_val[1].y = 0.0;
|
|
818
|
+
out_val[2].x = a[2];
|
|
819
|
+
out_val[2].y = 0.0;
|
|
820
|
+
out_val[3].x = a[3];
|
|
821
|
+
out_val[3].y = 0.0;
|
|
1006
822
|
}
|
|
1007
|
-
|
|
1008
823
|
void vec4_scalar_mul_fp64(vec2 a[4], vec2 b, out vec2 out_val[4]) {
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
824
|
+
out_val[0] = mul_fp64(a[0], b);
|
|
825
|
+
out_val[1] = mul_fp64(a[1], b);
|
|
826
|
+
out_val[2] = mul_fp64(a[2], b);
|
|
827
|
+
out_val[3] = mul_fp64(a[3], b);
|
|
1013
828
|
}
|
|
1014
|
-
|
|
1015
829
|
void vec4_sum_fp64(vec2 a[4], vec2 b[4], out vec2 out_val[4]) {
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
830
|
+
for (int i = 0; i < 4; i++) {
|
|
831
|
+
out_val[i] = sum_fp64(a[i], b[i]);
|
|
832
|
+
}
|
|
1019
833
|
}
|
|
1020
|
-
|
|
1021
834
|
void vec4_dot_fp64(vec2 a[4], vec2 b[4], out vec2 out_val) {
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
out_val = sum_fp64(sum_fp64(v[0], v[1]), sum_fp64(v[2], v[3]));
|
|
835
|
+
vec2 v[4];
|
|
836
|
+
v[0] = mul_fp64(a[0], b[0]);
|
|
837
|
+
v[1] = mul_fp64(a[1], b[1]);
|
|
838
|
+
v[2] = mul_fp64(a[2], b[2]);
|
|
839
|
+
v[3] = mul_fp64(a[3], b[3]);
|
|
840
|
+
out_val = sum_fp64(sum_fp64(v[0], v[1]), sum_fp64(v[2], v[3]));
|
|
1030
841
|
}
|
|
1031
|
-
|
|
1032
842
|
void mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
}
|
|
843
|
+
vec2 tmp[4];
|
|
844
|
+
for (int i = 0; i < 4; i++)
|
|
845
|
+
{
|
|
846
|
+
for (int j = 0; j < 4; j++)
|
|
847
|
+
{
|
|
848
|
+
tmp[j] = b[j + i * 4];
|
|
849
|
+
}
|
|
850
|
+
vec4_dot_fp64(a, tmp, out_val[i]);
|
|
851
|
+
}
|
|
1043
852
|
}
|
|
1044
|
-
`;var
|
|
853
|
+
`;var Zt={ONE:1};function $t(){return Zt}var Xe={name:"fp64-arithmetic",vs:Ze,getUniforms:$t,fp64ify:J,fp64LowPart:xe,fp64ifyMatrix4:Pe},ee={name:"fp64",vs:$e,dependencies:[Xe],fp64ify:J,fp64LowPart:xe,fp64ifyMatrix4:Pe};var Si=1/Math.PI*180,ki=1/180*Math.PI,Xt={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...Xt}};var I=globalThis.mathgl.config;function ye(r){return Array.isArray(r)||ArrayBuffer.isView(r)&&!(r instanceof DataView)}function A(r,e,t){let i=I.EPSILON;t&&(I.EPSILON=t);try{if(r===e)return!0;if(ye(r)&&ye(e)){if(r.length!==e.length)return!1;for(let s=0;s<r.length;++s)if(!A(r[s],e[s]))return!1;return!0}return r&&r.equals?r.equals(e):e&&e.equals?e.equals(r):typeof r=="number"&&typeof e=="number"?Math.abs(r-e)<=I.EPSILON*Math.max(1,Math.abs(r),Math.abs(e)):!1}finally{I.EPSILON=i}}var R=typeof Float32Array<"u"?Float32Array:Array,Te=Math.random;function te(r){return r>=0?Math.round(r):r%.5===0?Math.floor(r):Math.round(r)}var Bi=Math.PI/180;var re={};Oe(re,{add:()=>ir,angle:()=>Mr,bezier:()=>gr,ceil:()=>sr,clone:()=>Jt,copy:()=>tr,create:()=>Qe,cross:()=>dr,dist:()=>kr,distance:()=>it,div:()=>Sr,divide:()=>rt,dot:()=>Ae,equals:()=>Ir,exactEquals:()=>Or,floor:()=>or,forEach:()=>Dr,fromValues:()=>er,hermite:()=>vr,inverse:()=>_r,len:()=>Br,length:()=>Je,lerp:()=>mr,max:()=>ar,min:()=>nr,mul:()=>Cr,multiply:()=>tt,negate:()=>ur,normalize:()=>pr,random:()=>xr,rotateX:()=>br,rotateY:()=>Ar,rotateZ:()=>Er,round:()=>lr,scale:()=>fr,scaleAndAdd:()=>cr,set:()=>rr,slerp:()=>hr,sqrDist:()=>Nr,sqrLen:()=>wr,squaredDistance:()=>st,squaredLength:()=>ot,str:()=>Lr,sub:()=>Rr,subtract:()=>et,transformMat3:()=>yr,transformMat4:()=>Pr,transformQuat:()=>Tr,zero:()=>Fr});function Qe(){let r=new R(3);return R!=Float32Array&&(r[0]=0,r[1]=0,r[2]=0),r}function Jt(r){let e=new R(3);return e[0]=r[0],e[1]=r[1],e[2]=r[2],e}function Je(r){let e=r[0],t=r[1],i=r[2];return Math.sqrt(e*e+t*t+i*i)}function er(r,e,t){let i=new R(3);return i[0]=r,i[1]=e,i[2]=t,i}function tr(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r}function rr(r,e,t,i){return r[0]=e,r[1]=t,r[2]=i,r}function ir(r,e,t){return r[0]=e[0]+t[0],r[1]=e[1]+t[1],r[2]=e[2]+t[2],r}function et(r,e,t){return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r[2]=e[2]-t[2],r}function tt(r,e,t){return r[0]=e[0]*t[0],r[1]=e[1]*t[1],r[2]=e[2]*t[2],r}function rt(r,e,t){return r[0]=e[0]/t[0],r[1]=e[1]/t[1],r[2]=e[2]/t[2],r}function sr(r,e){return r[0]=Math.ceil(e[0]),r[1]=Math.ceil(e[1]),r[2]=Math.ceil(e[2]),r}function or(r,e){return r[0]=Math.floor(e[0]),r[1]=Math.floor(e[1]),r[2]=Math.floor(e[2]),r}function nr(r,e,t){return r[0]=Math.min(e[0],t[0]),r[1]=Math.min(e[1],t[1]),r[2]=Math.min(e[2],t[2]),r}function ar(r,e,t){return r[0]=Math.max(e[0],t[0]),r[1]=Math.max(e[1],t[1]),r[2]=Math.max(e[2],t[2]),r}function lr(r,e){return r[0]=te(e[0]),r[1]=te(e[1]),r[2]=te(e[2]),r}function fr(r,e,t){return r[0]=e[0]*t,r[1]=e[1]*t,r[2]=e[2]*t,r}function cr(r,e,t,i){return r[0]=e[0]+t[0]*i,r[1]=e[1]+t[1]*i,r[2]=e[2]+t[2]*i,r}function it(r,e){let t=e[0]-r[0],i=e[1]-r[1],s=e[2]-r[2];return Math.sqrt(t*t+i*i+s*s)}function st(r,e){let t=e[0]-r[0],i=e[1]-r[1],s=e[2]-r[2];return t*t+i*i+s*s}function ot(r){let e=r[0],t=r[1],i=r[2];return e*e+t*t+i*i}function ur(r,e){return r[0]=-e[0],r[1]=-e[1],r[2]=-e[2],r}function _r(r,e){return r[0]=1/e[0],r[1]=1/e[1],r[2]=1/e[2],r}function pr(r,e){let t=e[0],i=e[1],s=e[2],o=t*t+i*i+s*s;return o>0&&(o=1/Math.sqrt(o)),r[0]=e[0]*o,r[1]=e[1]*o,r[2]=e[2]*o,r}function Ae(r,e){return r[0]*e[0]+r[1]*e[1]+r[2]*e[2]}function dr(r,e,t){let i=e[0],s=e[1],o=e[2],n=t[0],a=t[1],l=t[2];return r[0]=s*l-o*a,r[1]=o*n-i*l,r[2]=i*a-s*n,r}function mr(r,e,t,i){let s=e[0],o=e[1],n=e[2];return r[0]=s+i*(t[0]-s),r[1]=o+i*(t[1]-o),r[2]=n+i*(t[2]-n),r}function hr(r,e,t,i){let s=Math.acos(Math.min(Math.max(Ae(e,t),-1),1)),o=Math.sin(s),n=Math.sin((1-i)*s)/o,a=Math.sin(i*s)/o;return r[0]=n*e[0]+a*t[0],r[1]=n*e[1]+a*t[1],r[2]=n*e[2]+a*t[2],r}function vr(r,e,t,i,s,o){let n=o*o,a=n*(2*o-3)+1,l=n*(o-2)+o,f=n*(o-1),c=n*(3-2*o);return r[0]=e[0]*a+t[0]*l+i[0]*f+s[0]*c,r[1]=e[1]*a+t[1]*l+i[1]*f+s[1]*c,r[2]=e[2]*a+t[2]*l+i[2]*f+s[2]*c,r}function gr(r,e,t,i,s,o){let n=1-o,a=n*n,l=o*o,f=a*n,c=3*o*a,u=3*l*n,_=l*o;return r[0]=e[0]*f+t[0]*c+i[0]*u+s[0]*_,r[1]=e[1]*f+t[1]*c+i[1]*u+s[1]*_,r[2]=e[2]*f+t[2]*c+i[2]*u+s[2]*_,r}function xr(r,e){e=e===void 0?1:e;let t=Te()*2*Math.PI,i=Te()*2-1,s=Math.sqrt(1-i*i)*e;return r[0]=Math.cos(t)*s,r[1]=Math.sin(t)*s,r[2]=i*e,r}function Pr(r,e,t){let i=e[0],s=e[1],o=e[2],n=t[3]*i+t[7]*s+t[11]*o+t[15];return n=n||1,r[0]=(t[0]*i+t[4]*s+t[8]*o+t[12])/n,r[1]=(t[1]*i+t[5]*s+t[9]*o+t[13])/n,r[2]=(t[2]*i+t[6]*s+t[10]*o+t[14])/n,r}function yr(r,e,t){let i=e[0],s=e[1],o=e[2];return r[0]=i*t[0]+s*t[3]+o*t[6],r[1]=i*t[1]+s*t[4]+o*t[7],r[2]=i*t[2]+s*t[5]+o*t[8],r}function Tr(r,e,t){let i=t[0],s=t[1],o=t[2],n=t[3],a=e[0],l=e[1],f=e[2],c=s*f-o*l,u=o*a-i*f,_=i*l-s*a,p=s*_-o*u,h=o*c-i*_,K=i*u-s*c,v=n*2;return c*=v,u*=v,_*=v,p*=2,h*=2,K*=2,r[0]=a+c+p,r[1]=l+u+h,r[2]=f+_+K,r}function br(r,e,t,i){let s=[],o=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],o[0]=s[0],o[1]=s[1]*Math.cos(i)-s[2]*Math.sin(i),o[2]=s[1]*Math.sin(i)+s[2]*Math.cos(i),r[0]=o[0]+t[0],r[1]=o[1]+t[1],r[2]=o[2]+t[2],r}function Ar(r,e,t,i){let s=[],o=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],o[0]=s[2]*Math.sin(i)+s[0]*Math.cos(i),o[1]=s[1],o[2]=s[2]*Math.cos(i)-s[0]*Math.sin(i),r[0]=o[0]+t[0],r[1]=o[1]+t[1],r[2]=o[2]+t[2],r}function Er(r,e,t,i){let s=[],o=[];return s[0]=e[0]-t[0],s[1]=e[1]-t[1],s[2]=e[2]-t[2],o[0]=s[0]*Math.cos(i)-s[1]*Math.sin(i),o[1]=s[0]*Math.sin(i)+s[1]*Math.cos(i),o[2]=s[2],r[0]=o[0]+t[0],r[1]=o[1]+t[1],r[2]=o[2]+t[2],r}function Mr(r,e){let t=r[0],i=r[1],s=r[2],o=e[0],n=e[1],a=e[2],l=Math.sqrt((t*t+i*i+s*s)*(o*o+n*n+a*a)),f=l&&Ae(r,e)/l;return Math.acos(Math.min(Math.max(f,-1),1))}function Fr(r){return r[0]=0,r[1]=0,r[2]=0,r}function Lr(r){return"vec3(".concat(r[0],", ").concat(r[1],", ").concat(r[2],")")}function Or(r,e){return r[0]===e[0]&&r[1]===e[1]&&r[2]===e[2]}function Ir(r,e){let t=r[0],i=r[1],s=r[2],o=e[0],n=e[1],a=e[2];return Math.abs(t-o)<=1e-6*Math.max(1,Math.abs(t),Math.abs(o))&&Math.abs(i-n)<=1e-6*Math.max(1,Math.abs(i),Math.abs(n))&&Math.abs(s-a)<=1e-6*Math.max(1,Math.abs(s),Math.abs(a))}var Rr=et,Cr=tt,Sr=rt,kr=it,Nr=st,Br=Je,wr=ot,Dr=function(){let r=Qe();return function(e,t,i,s,o,n){let a,l;for(t||(t=3),i||(i=0),s?l=Math.min(s*t+i,e.length):l=e.length,a=i;a<l;a+=t)r[0]=e[a],r[1]=e[a+1],r[2]=e[a+2],o(r,r,n),e[a]=r[0],e[a+1]=r[1],e[a+2]=r[2];return e}}();var ie=d(m(),1);var nt=`const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);
|
|
1045
854
|
uniform vec2 project_uViewProjectionMatrixFP64[16];
|
|
1046
855
|
void mercatorProject_fp64(vec4 lnglat_fp64, out vec2 out_val[2]) {
|
|
1047
856
|
#if defined(NVIDIA_FP64_WORKAROUND)
|
|
@@ -1101,7 +910,7 @@ return project_position_to_clipspace(
|
|
|
1101
910
|
position, position64xyLow, offset, commonPosition
|
|
1102
911
|
);
|
|
1103
912
|
}
|
|
1104
|
-
`;var{fp64ify:
|
|
913
|
+
`;var{fp64ify:Vr,fp64ifyMatrix4:jr}=ee,se={name:"project64",dependencies:[ie.project,ee],vs:nt,getUniforms:Gr},zr=(0,ie._memoize)(Ur);function Gr(r){if(r&&"viewport"in r){let{viewProjectionMatrix:e,scale:t}=r.viewport;return zr({viewProjectionMatrix:e,scale:t})}return{}}function Ur({viewProjectionMatrix:r,scale:e}){let t=jr(r),i=Vr(e);return{project_uViewProjectionMatrixFP64:t,project64_uViewProjectionMatrix:t,project64_uScale:i}}var Ee=class extends C.LayerExtension{getShaders(){let{coordinateSystem:e}=this.props;if(e!==C.COORDINATE_SYSTEM.LNGLAT&&e!==C.COORDINATE_SYSTEM.DEFAULT)throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[se]}}},S=Ee;(()=>{Ee.extensionName="Fp64Extension"})();var k=d(m(),1);var at={inject:{"vs:#decl":`
|
|
1105
914
|
in vec2 instanceDashArrays;
|
|
1106
915
|
in float instanceDashOffsets;
|
|
1107
916
|
out vec2 vDashArray;
|
|
@@ -1146,7 +955,7 @@ discard;
|
|
|
1146
955
|
}
|
|
1147
956
|
}
|
|
1148
957
|
}
|
|
1149
|
-
`}},
|
|
958
|
+
`}},lt={inject:{"vs:#decl":`
|
|
1150
959
|
in float instanceOffsets;
|
|
1151
960
|
`,"vs:DECKGL_FILTER_SIZE":`
|
|
1152
961
|
float offsetWidth = abs(instanceOffsets * 2.0) + 1.0;
|
|
@@ -1163,7 +972,7 @@ isInside = step(-1.0, vPathPosition.x) * step(vPathPosition.x, 1.0);
|
|
|
1163
972
|
if (isInside == 0.0) {
|
|
1164
973
|
discard;
|
|
1165
974
|
}
|
|
1166
|
-
`}};var
|
|
975
|
+
`}};var qr={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1},oe=class extends k.LayerExtension{constructor({dash:e=!1,offset:t=!1,highPrecisionDash:i=!1}={}){super({dash:e||i,offset:t,highPrecisionDash:i})}isEnabled(e){return"pathTesselator"in e.state}getShaders(e){if(!e.isEnabled(this))return null;let t={};return e.opts.dash&&(t=(0,k._mergeShaders)(t,at)),e.opts.offset&&(t=(0,k._mergeShaders)(t,lt)),t}initializeState(e,t){let i=this.getAttributeManager();!i||!t.isEnabled(this)||(t.opts.dash&&i.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"},instanceDashOffsets:t.opts.highPrecisionDash?{size:1,accessor:"getPath",transform:t.getDashOffsets.bind(this)}:{size:1,update:s=>{s.constant=!0,s.value=[0]}}}),t.opts.offset&&i.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}))}updateState(e,t){if(!t.isEnabled(this))return;let i={};t.opts.dash&&(i.dashAlignMode=this.props.dashJustified?1:0,i.dashGapPickable=Boolean(this.props.dashGapPickable)),this.state.model?.setUniforms(i)}getDashOffsets(e){let t=[0],i=this.props.positionFormat==="XY"?2:3,s=Array.isArray(e[0]),o=s?e.length:e.length/i,n,a;for(let l=0;l<o-1;l++)n=s?e[l]:e.slice(l*i,l*i+i),n=this.projectPosition(n),l>0&&(t[l]=t[l-1]+re.dist(a,n)),a=n;return t}},N=oe;(()=>{oe.defaultProps=qr})(),(()=>{oe.extensionName="PathStyleExtension"})();var ct=d(m(),1);var B=d(m(),1);var Wr=`
|
|
1167
976
|
#ifdef NON_INSTANCED_MODEL
|
|
1168
977
|
#define FILL_PATTERN_FRAME_ATTRIB fillPatternFrames
|
|
1169
978
|
#define FILL_PATTERN_SCALE_ATTRIB fillPatternScales
|
|
@@ -1181,7 +990,7 @@ uniform vec2 fill_patternTextureSize;
|
|
|
1181
990
|
out vec2 fill_uv;
|
|
1182
991
|
out vec4 fill_patternBounds;
|
|
1183
992
|
out vec4 fill_patternPlacement;
|
|
1184
|
-
`,
|
|
993
|
+
`,Hr=`
|
|
1185
994
|
uniform bool fill_patternEnabled;
|
|
1186
995
|
uniform bool fill_patternMask;
|
|
1187
996
|
uniform sampler2D fill_patternTexture;
|
|
@@ -1191,7 +1000,7 @@ in vec4 fill_patternBounds;
|
|
|
1191
1000
|
in vec4 fill_patternPlacement;
|
|
1192
1001
|
in vec2 fill_uv;
|
|
1193
1002
|
const float FILL_UV_SCALE = 512.0 / 40000000.0;
|
|
1194
|
-
`,
|
|
1003
|
+
`,Yr={"vs:DECKGL_FILTER_GL_POSITION":`
|
|
1195
1004
|
fill_uv = geometry.position.xy;
|
|
1196
1005
|
`,"vs:DECKGL_FILTER_COLOR":`
|
|
1197
1006
|
if (fill_patternEnabled) {
|
|
@@ -1211,12 +1020,12 @@ if (!fill_patternMask) {
|
|
|
1211
1020
|
color.rgb = patternColor.rgb;
|
|
1212
1021
|
}
|
|
1213
1022
|
}
|
|
1214
|
-
`};function
|
|
1023
|
+
`};function Kr(r,e){if(!r)return{};if("fillPatternTexture"in r){let{fillPatternTexture:t}=r;return{fill_patternTexture:t,fill_patternTextureSize:[t.width,t.height]}}if("viewport"in r){let{fillPatternMask:t=!0,fillPatternEnabled:i=!0}=r,{project_uCommonOrigin:s}=e,o=[(0,B.fp64LowPart)(s[0]),(0,B.fp64LowPart)(s[1])];return{fill_uvCoordinateOrigin:s.slice(0,2),fill_uvCoordinateOrigin64Low:o,fill_patternMask:t,fill_patternEnabled:i}}return{}}var ft={name:"fill-pattern",vs:Wr,fs:Hr,inject:Yr,dependencies:[B.project],getUniforms:Kr};var Zr={fillPatternEnabled:!0,fillPatternAtlas:{type:"image",value:null,async:!0,parameters:{minFilter:"linear"}},fillPatternMapping:{type:"object",value:{},async:!0},fillPatternMask:!0,getFillPattern:{type:"accessor",value:r=>r.pattern},getFillPatternScale:{type:"accessor",value:1},getFillPatternOffset:{type:"accessor",value:[0,0]}},ne=class extends ct.LayerExtension{constructor({pattern:e=!1}={}){super({pattern:e})}isEnabled(e){return e.getAttributeManager()!==null&&!("pathTesselator"in e.state)}getShaders(e){return e.isEnabled(this)?{modules:[e.opts.pattern&&ft].filter(Boolean)}:null}initializeState(e,t){if(!t.isEnabled(this))return;let i=this.getAttributeManager();t.opts.pattern&&i.add({fillPatternFrames:{size:4,accessor:"getFillPattern",transform:t.getPatternFrame.bind(this),shaderAttributes:{fillPatternFrames:{divisor:0},instanceFillPatternFrames:{divisor:1}}},fillPatternScales:{size:1,accessor:"getFillPatternScale",defaultValue:1,shaderAttributes:{fillPatternScales:{divisor:0},instanceFillPatternScales:{divisor:1}}},fillPatternOffsets:{size:2,accessor:"getFillPatternOffset",shaderAttributes:{fillPatternOffsets:{divisor:0},instanceFillPatternOffsets:{divisor:1}}}}),this.setState({emptyTexture:this.context.device.createTexture({data:new Uint8Array(4),width:1,height:1})})}updateState({props:e,oldProps:t},i){i.isEnabled(this)&&e.fillPatternMapping&&e.fillPatternMapping!==t.fillPatternMapping&&this.getAttributeManager().invalidate("getFillPattern")}draw(e,t){if(!t.isEnabled(this))return;let{fillPatternAtlas:i}=this.props;this.setModuleParameters({fillPatternTexture:i||this.state.emptyTexture})}finalizeState(){this.state.emptyTexture?.delete()}getPatternFrame(e){let{fillPatternMapping:t}=this.getCurrentLayer().props,i=t&&t[e];return i?[i.x,i.y,i.width,i.height]:[0,0,0,0]}},w=ne;(()=>{ne.defaultProps=Zr})(),(()=>{ne.extensionName="FillStyleExtension"})();var ut=d(m(),1);var $r={clipBounds:[0,0,1,1],clipByInstance:void 0},_t=`
|
|
1215
1024
|
uniform vec4 clip_bounds;
|
|
1216
1025
|
bool clip_isInBounds(vec2 position) {
|
|
1217
1026
|
return position.x >= clip_bounds[0] && position.y >= clip_bounds[1] && position.x < clip_bounds[2] && position.y < clip_bounds[3];
|
|
1218
1027
|
}
|
|
1219
|
-
`,
|
|
1028
|
+
`,Xr={name:"clip-vs",vs:_t},Qr={"vs:#decl":`
|
|
1220
1029
|
out float clip_isVisible;
|
|
1221
1030
|
`,"vs:DECKGL_FILTER_GL_POSITION":`
|
|
1222
1031
|
clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));
|
|
@@ -1224,7 +1033,7 @@ clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));
|
|
|
1224
1033
|
in float clip_isVisible;
|
|
1225
1034
|
`,"fs:DECKGL_FILTER_COLOR":`
|
|
1226
1035
|
if (clip_isVisible < 0.5) discard;
|
|
1227
|
-
`},
|
|
1036
|
+
`},Jr={name:"clip-fs",fs:_t},ei={"vs:#decl":`
|
|
1228
1037
|
out vec2 clip_commonPosition;
|
|
1229
1038
|
`,"vs:DECKGL_FILTER_GL_POSITION":`
|
|
1230
1039
|
clip_commonPosition = geometry.position.xy;
|
|
@@ -1232,7 +1041,7 @@ clip_commonPosition = geometry.position.xy;
|
|
|
1232
1041
|
in vec2 clip_commonPosition;
|
|
1233
1042
|
`,"fs:DECKGL_FILTER_COLOR":`
|
|
1234
1043
|
if (!clip_isInBounds(clip_commonPosition)) discard;
|
|
1235
|
-
`},
|
|
1044
|
+
`},ae=class extends ut.LayerExtension{getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.clipByInstance!==void 0&&(e=Boolean(this.props.clipByInstance)),this.state.clipByInstance=e,e?{modules:[Xr],inject:Qr}:{modules:[Jr],inject:ei}}draw({uniforms:e}){let{clipBounds:t}=this.props;if(this.state.clipByInstance)e.clip_bounds=t;else{let i=this.projectPosition([t[0],t[1],0]),s=this.projectPosition([t[2],t[3],0]);e.clip_bounds=[Math.min(i[0],s[0]),Math.min(i[1],s[1]),Math.max(i[0],s[0]),Math.max(i[1],s[1])]}}},D=ae;(()=>{ae.defaultProps=$r})(),(()=>{ae.extensionName="ClipExtension"})();var gt=d(m(),1);var pt=d(m(),1);var ti=`
|
|
1236
1045
|
#ifdef NON_INSTANCED_MODEL
|
|
1237
1046
|
in float collisionPriorities;
|
|
1238
1047
|
#else
|
|
@@ -1271,7 +1080,7 @@ delta.y += step.y;
|
|
|
1271
1080
|
float W = 2.0 * floatN + 1.0;
|
|
1272
1081
|
return pow(accumulator / (W * W), 2.2);
|
|
1273
1082
|
}
|
|
1274
|
-
`,
|
|
1083
|
+
`,ri={"vs:#decl":`
|
|
1275
1084
|
float collision_fade = 1.0;
|
|
1276
1085
|
`,"vs:DECKGL_FILTER_GL_POSITION":`
|
|
1277
1086
|
if (collision_sort) {
|
|
@@ -1292,13 +1101,13 @@ position = vec4(0.0, 0.0, 2.0, 1.0);
|
|
|
1292
1101
|
}
|
|
1293
1102
|
`,"vs:DECKGL_FILTER_COLOR":`
|
|
1294
1103
|
color.a *= collision_fade;
|
|
1295
|
-
`},
|
|
1104
|
+
`},ii=(r,e)=>{if(!r||!("dummyCollisionMap"in r))return{};let{collisionFBO:t,drawToCollisionMap:i,dummyCollisionMap:s}=r;return{collision_sort:Boolean(i),collision_texture:!i&&t?t.colorAttachments[0]:s}},dt={name:"collision",dependencies:[pt.project],vs:ti,inject:ri,getUniforms:ii};var vt=d(m(),1);var mt=d(m(),1),V=class extends mt._LayersPass{renderCollisionMap(e,t){let s=[0,0,0,0];return this.device.withParametersWebGL({scissorTest:!0,scissor:[1,1,e.width-2*1,e.height-2*1],blend:!1,depthTest:!0,depthRange:[0,1]},()=>this.render({...t,clearColor:s,target:e,pass:"collision"}))}getModuleParameters(){return{drawToCollisionMap:!0,picking:{isActive:1,isAttribute:!1},lightSources:{}}}};var Me=d(m(),1);var ht=d(m(),1),j=class extends ht._LayersPass{constructor(e,t){super(e,t);let{mapSize:i=2048}=t;this.maskMap=e.createTexture({format:"rgba8unorm",width:i,height:i,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),this.fbo=e.createFramebuffer({id:"maskmap",width:i,height:i,colorAttachments:[this.maskMap]})}render(e){let t=[!1,!1,!1,!1];t[e.channel]=!0;let i=[255,255,255,255];return this.device.withParametersWebGL({blend:!0,blendFunc:[0,1],blendEquation:32778,colorMask:t,depthTest:!1},()=>super.render({...e,clearColor:i,target:this.fbo,pass:"mask"}))}shouldDrawLayer(e){return e.props.operation.includes("mask")}delete(){this.fbo.delete(),this.maskMap.delete()}};var le=d(m(),1);function E(r,e){let t=[1/0,1/0,-1/0,-1/0];for(let i of r){let s=i.getBounds();if(s){let o=i.projectPosition(s[0],{viewport:e,autoOffset:!1}),n=i.projectPosition(s[1],{viewport:e,autoOffset:!1});t[0]=Math.min(t[0],o[0]),t[1]=Math.min(t[1],o[1]),t[2]=Math.max(t[2],n[0]),t[3]=Math.max(t[3],n[1])}}return Number.isFinite(t[0])?t:null}var si=2048;function M(r){let{bounds:e,viewport:t,border:i=0}=r,{isGeospatial:s}=t;if(e[2]<=e[0]||e[3]<=e[1])return null;let o=t.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]),{width:n,height:a,zoom:l}=r;if(l===void 0){n=n-i*2,a=a-i*2;let f=Math.min(n/(e[2]-e[0]),a/(e[3]-e[1]));l=Math.min(Math.log2(f),20)}else if(!n||!a){let f=2**l;n=Math.round(Math.abs(e[2]-e[0])*f),a=Math.round(Math.abs(e[3]-e[1])*f);let c=si-i*2;if(n>c||a>c){let u=c/Math.max(n,a);n=Math.round(n*u),a=Math.round(a*u),l+=Math.log2(u)}}return s?new le.WebMercatorViewport({id:t.id,x:i,y:i,width:n,height:a,longitude:o[0],latitude:o[1],zoom:l,orthographic:!0}):new le.OrthographicViewport({id:t.id,x:i,y:i,width:n,height:a,target:o,zoom:l,flipY:!1})}function oi(r,e){let t;if(e&&e.length===2){let[o,n]=e,a=r.getBounds({z:o}),l=r.getBounds({z:n});t=[Math.min(a[0],l[0]),Math.min(a[1],l[1]),Math.max(a[2],l[2]),Math.max(a[3],l[3])]}else t=r.getBounds();let i=r.projectPosition(t.slice(0,2)),s=r.projectPosition(t.slice(2,4));return[i[0],i[1],s[0],s[1]]}function F(r,e,t){if(!r)return[0,0,1,1];let i=oi(e,t),s=ni(i);return r[2]-r[0]<=s[2]-s[0]&&r[3]-r[1]<=s[3]-s[1]?r:[Math.max(r[0],s[0]),Math.max(r[1],s[1]),Math.min(r[2],s[2]),Math.min(r[3],s[3])]}function ni(r){let e=r[2]-r[0],t=r[3]-r[1],i=(r[0]+r[2])/2,s=(r[1]+r[3])/2;return[i-e,s-t,i+e,s+t]}var T=class{constructor(){this.id="mask-effect",this.props=null,this.useInPicking=!0,this.order=0,this.channels=[],this.masks=null}preRender(e,{layers:t,layerFilter:i,viewports:s,onViewportActive:o,views:n,isPicking:a}){let l=!1;if(this.dummyMaskMap||(this.dummyMaskMap=e.createTexture({width:1,height:1})),a)return{didRender:l};let f=t.filter(p=>p.props.visible&&p.props.operation.includes("mask"));if(f.length===0)return this.masks=null,this.channels.length=0,{didRender:l};this.masks={},this.maskPass||(this.maskPass=new j(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap);let c=this._sortMaskChannels(f),u=s[0],_=!this.lastViewport||!this.lastViewport.equals(u);if(u.resolution!==void 0)return Me.log.warn("MaskExtension is not supported in GlobeView")(),{didRender:l};for(let p in c){let h=this._renderChannel(c[p],{layerFilter:i,onViewportActive:o,views:n,viewport:u,viewportChanged:_});l||=h}return{didRender:l}}_renderChannel(e,{layerFilter:t,onViewportActive:i,views:s,viewport:o,viewportChanged:n}){let a=!1,l=this.channels[e.index];if(!l)return a;let f=e===l||e.layers.length!==l.layers.length||e.layers.some((c,u)=>c!==l.layers[u]||c.props.transitions)||e.layerBounds.some((c,u)=>c!==l.layerBounds[u]);if(e.bounds=l.bounds,e.maskBounds=l.maskBounds,this.channels[e.index]=e,f||n){this.lastViewport=o;let c=E(e.layers,o);if(e.bounds=c&&F(c,o),f||!A(e.bounds,l.bounds)){let{maskPass:u,maskMap:_}=this,p=c&&M({bounds:e.bounds,viewport:o,width:_.width,height:_.height,border:1});e.maskBounds=p?p.getBounds():[0,0,1,1],u.render({pass:"mask",channel:e.index,layers:e.layers,layerFilter:t,viewports:p?[p]:[],onViewportActive:i,views:s,moduleParameters:{devicePixelRatio:1}}),a=!0}}return this.masks[e.id]={index:e.index,bounds:e.maskBounds,coordinateOrigin:e.coordinateOrigin,coordinateSystem:e.coordinateSystem},a}_sortMaskChannels(e){let t={},i=0;for(let s of e){let{id:o}=s.root,n=t[o];if(!n){if(++i>4){Me.log.warn("Too many mask layers. The max supported is 4")();continue}n={id:o,index:this.channels.findIndex(a=>a?.id===o),layers:[],layerBounds:[],coordinateOrigin:s.root.props.coordinateOrigin,coordinateSystem:s.root.props.coordinateSystem},t[o]=n}n.layers.push(s),n.layerBounds.push(s.getBounds())}for(let s=0;s<4;s++){let o=this.channels[s];(!o||!(o.id in t))&&(this.channels[s]=null)}for(let s in t){let o=t[s];o.index<0&&(o.index=this.channels.findIndex(n=>!n),this.channels[o.index]=o)}return t}getModuleParameters(){return{maskMap:this.masks?this.maskMap:this.dummyMaskMap,maskChannels:this.masks}}cleanup(){this.dummyMaskMap&&(this.dummyMaskMap.delete(),this.dummyMaskMap=void 0),this.maskPass&&(this.maskPass.delete(),this.maskPass=void 0,this.maskMap=void 0),this.lastViewport=void 0,this.masks=null,this.channels.length=0}};var Fe=2,z=class{constructor(){this.id="collision-filter-effect",this.props=null,this.useInPicking=!0,this.order=1,this.channels={},this.collisionFBOs={}}preRender(e,{effects:t,layers:i,layerFilter:s,viewports:o,onViewportActive:n,views:a,isPicking:l,preRenderStats:f={}}){if(this.dummyCollisionMap||(this.dummyCollisionMap=e.createTexture({width:1,height:1})),l)return;let c=i.filter(({props:{visible:v,collisionEnabled:ge}})=>v&&ge);if(c.length===0){this.channels={};return}this.collisionFilterPass||(this.collisionFilterPass=new V(e,{id:"default-collision-filter"}));let u=t?.filter(v=>v.constructor===T),_=f["mask-effect"]?.didRender,p=this._groupByCollisionGroup(e,c),h=o[0],K=!this.lastViewport||!this.lastViewport.equals(h)||_;for(let v in p){let ge=this.collisionFBOs[v],Lt=p[v],[Ot,It]=e.canvasContext.getPixelSize();ge.resize({width:Ot/Fe,height:It/Fe}),this._render(Lt,{effects:u,layerFilter:s,onViewportActive:n,views:a,viewport:h,viewportChanged:K})}}_render(e,{effects:t,layerFilter:i,onViewportActive:s,views:o,viewport:n,viewportChanged:a}){let{collisionGroup:l}=e,f=this.channels[l];if(!f)return;let c=a||e===f||!(0,vt._deepEqual)(f.layers,e.layers,1)||e.layerBounds.some((u,_)=>!A(u,f.layerBounds[_]))||e.allLayersLoaded!==f.allLayersLoaded||e.layers.some(u=>u.props.transitions);if(this.channels[l]=e,c){this.lastViewport=n;let u=this.collisionFBOs[l];this.collisionFilterPass.renderCollisionMap(u,{pass:"collision-filter",isPicking:!0,layers:e.layers,effects:t,layerFilter:i,viewports:n?[n]:[],onViewportActive:s,views:o,moduleParameters:{dummyCollisionMap:this.dummyCollisionMap,devicePixelRatio:u.device.canvasContext.getDevicePixelRatio()/Fe}})}}_groupByCollisionGroup(e,t){let i={};for(let s of t){let{collisionGroup:o}=s.props,n=i[o];n||(n={collisionGroup:o,layers:[],layerBounds:[],allLayersLoaded:!0},i[o]=n),n.layers.push(s),n.layerBounds.push(s.getBounds()),s.isLoaded||(n.allLayersLoaded=!1)}for(let s of Object.keys(i))this.collisionFBOs[s]||this.createFBO(e,s),this.channels[s]||(this.channels[s]=i[s]);for(let s of Object.keys(this.collisionFBOs))i[s]||this.destroyFBO(s);return i}getModuleParameters(e){let{collisionGroup:t}=e.props,{collisionFBOs:i,dummyCollisionMap:s}=this;return{collisionFBO:i[t],dummyCollisionMap:s}}cleanup(){this.dummyCollisionMap&&(this.dummyCollisionMap.delete(),this.dummyCollisionMap=void 0),this.channels={};for(let e of Object.keys(this.collisionFBOs))this.destroyFBO(e);this.collisionFBOs={},this.lastViewport=void 0}createFBO(e,t){let{width:i,height:s}=e.gl.canvas,o=e.createTexture({format:"rgba8unorm",width:i,height:s,sampler:{minFilter:"nearest",magFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),n=e.createTexture({format:"depth16unorm",width:i,height:s,mipmaps:!1,dataFormat:6402,type:5125});this.collisionFBOs[t]=e.createFramebuffer({id:`collision-${t}`,width:i,height:s,colorAttachments:[o],depthStencilAttachment:n})}destroyFBO(e){let t=this.collisionFBOs[e];t.colorAttachments[0]?.destroy(),t.depthStencilAttachment?.destroy(),t.destroy(),delete this.collisionFBOs[e]}};var ai={getCollisionPriority:{type:"accessor",value:0},collisionEnabled:!0,collisionGroup:{type:"string",value:"default"},collisionTestProps:{}},fe=class extends gt.LayerExtension{getShaders(){return{modules:[dt]}}draw({uniforms:e,context:t,moduleParameters:i}){let{collisionEnabled:s}=this.props,{collisionFBO:o,drawToCollisionMap:n}=i,a=s&&Boolean(o);e.collision_enabled=a,n&&(this.props=this.clone(this.props.collisionTestProps).props)}initializeState(e,t){if(this.getAttributeManager()===null)return;this.context.deck?._addDefaultEffect(new z),this.getAttributeManager().add({collisionPriorities:{size:1,accessor:"getCollisionPriority",shaderAttributes:{collisionPriorities:{divisor:0},instanceCollisionPriorities:{divisor:1}}}})}getNeedsPickingBuffer(){return this.props.collisionEnabled}},G=fe;(()=>{fe.defaultProps=ai})(),(()=>{fe.extensionName="CollisionFilterExtension"})();var y=d(m(),1);var xt=d(m(),1);var li=`
|
|
1296
1105
|
uniform vec4 mask_bounds;
|
|
1297
1106
|
uniform bool mask_maskByInstance;
|
|
1298
1107
|
vec2 mask_getCoords(vec4 position) {
|
|
1299
1108
|
return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);
|
|
1300
1109
|
}
|
|
1301
|
-
`,
|
|
1110
|
+
`,fi=`
|
|
1302
1111
|
uniform sampler2D mask_texture;
|
|
1303
1112
|
uniform int mask_channel;
|
|
1304
1113
|
uniform bool mask_enabled;
|
|
@@ -1324,7 +1133,7 @@ return maskValue >= 0.5;
|
|
|
1324
1133
|
return maskValue < 0.5;
|
|
1325
1134
|
}
|
|
1326
1135
|
}
|
|
1327
|
-
`,
|
|
1136
|
+
`,ci={"vs:#decl":`
|
|
1328
1137
|
out vec2 mask_texCoords;
|
|
1329
1138
|
`,"vs:#main-end":`
|
|
1330
1139
|
vec4 mask_common_position;
|
|
@@ -1342,13 +1151,13 @@ bool mask = mask_isInBounds(mask_texCoords);
|
|
|
1342
1151
|
fragColor = texture(mask_texture, mask_texCoords);
|
|
1343
1152
|
if (!mask) discard;
|
|
1344
1153
|
}
|
|
1345
|
-
`},
|
|
1346
|
-
`),
|
|
1154
|
+
`},ui=r=>r&&"maskMap"in r?{mask_texture:r.maskMap}:{},Pt={name:"mask",dependencies:[xt.project],vs:li,fs:fi,inject:ci,getUniforms:ui};var _i={maskId:"",maskByInstance:void 0,maskInverted:!1},ce=class extends y.LayerExtension{initializeState(){this.context.deck?._addDefaultEffect(new T)}getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.maskByInstance!==void 0&&(e=Boolean(this.props.maskByInstance)),this.state.maskByInstance=e,{modules:[Pt]}}draw({uniforms:e,context:t,moduleParameters:i}){e.mask_maskByInstance=this.state.maskByInstance;let{maskId:s,maskInverted:o}=this.props,{maskChannels:n}=i,{viewport:a}=t;if(n&&n[s]){let{index:l,bounds:f,coordinateOrigin:c}=n[s],{coordinateSystem:u}=n[s];e.mask_enabled=!0,e.mask_channel=l,e.mask_inverted=o,u===y.COORDINATE_SYSTEM.DEFAULT&&(u=a.isGeospatial?y.COORDINATE_SYSTEM.LNGLAT:y.COORDINATE_SYSTEM.CARTESIAN);let _={modelMatrix:null,fromCoordinateOrigin:c,fromCoordinateSystem:u},p=this.projectPosition([f[0],f[1],0],_),h=this.projectPosition([f[2],f[3],0],_);e.mask_bounds=[p[0],p[1],h[0],h[1]]}else s&&y.log.warn(`Could not find a mask layer with id: ${s}`)(),e.mask_enabled=!1}},U=ce;(()=>{ce.defaultProps=_i})(),(()=>{ce.extensionName="MaskExtension"})();var Ft=d(m(),1);var he=d(m(),1);var Tt=d(m(),1);var x={NONE:0,WRITE_HEIGHT_MAP:1,USE_HEIGHT_MAP:2,USE_COVER:3,USE_COVER_ONLY:4,SKIP:5},yt=Object.keys(x).map(r=>`const float TERRAIN_MODE_${r} = ${x[r]}.0;`).join(`
|
|
1155
|
+
`),ue={name:"terrain",dependencies:[Tt.project],inject:{"vs:#decl":`
|
|
1347
1156
|
uniform float terrain_mode;
|
|
1348
1157
|
uniform sampler2D terrain_map;
|
|
1349
1158
|
uniform vec4 terrain_bounds;
|
|
1350
1159
|
out vec3 commonPos;
|
|
1351
|
-
`+
|
|
1160
|
+
`+yt,"vs:#main-start":`
|
|
1352
1161
|
if (terrain_mode == TERRAIN_MODE_SKIP) {
|
|
1353
1162
|
gl_Position = vec4(0.0);
|
|
1354
1163
|
return;
|
|
@@ -1376,7 +1185,7 @@ uniform float terrain_mode;
|
|
|
1376
1185
|
uniform sampler2D terrain_map;
|
|
1377
1186
|
uniform vec4 terrain_bounds;
|
|
1378
1187
|
in vec3 commonPos;
|
|
1379
|
-
`+
|
|
1188
|
+
`+yt,"fs:#main-start":`
|
|
1380
1189
|
if (terrain_mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) {
|
|
1381
1190
|
fragColor = vec4(commonPos.z, 0.0, 0.0, 1.0);
|
|
1382
1191
|
return;
|
|
@@ -1392,6 +1201,6 @@ color = pixel + color * (1.0 - pixel.a);
|
|
|
1392
1201
|
}
|
|
1393
1202
|
return;
|
|
1394
1203
|
}
|
|
1395
|
-
`},getUniforms:(r={},e)=>{if("dummyHeightMap"in r){let{drawToTerrainHeightMap:t,heightMap:i,heightMapBounds:s,dummyHeightMap:o,terrainCover:n,useTerrainHeightMap:a,terrainSkipRender:l}=r,{project_uCommonOrigin:f}=e,c=l?x.SKIP:x.NONE,u=o,_=null;if(t)c=x.WRITE_HEIGHT_MAP,_=s;else if(a&&i)c=x.USE_HEIGHT_MAP,u=i,_=s;else if(n){let p=r.picking?.isActive;u=p?n.getPickingFramebuffer():n.getRenderFramebuffer(),p&&(c=x.SKIP),u?(c=c===x.SKIP?x.USE_COVER_ONLY:x.USE_COVER,_=n.bounds):u=o}return{terrain_mode:c,terrain_map:u,terrain_bounds:_?[_[0]-f[0],_[1]-f[1],_[2]-_[0],_[3]-_[1]]:[0,0,0,0]}}return null}};function q(r,e){return r.createFramebuffer({id:e.id,colorAttachments:[r.createTexture({...e.float&&{format:"rgba32float",type:5126},mipmaps:!1,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}})]})}var
|
|
1204
|
+
`},getUniforms:(r={},e)=>{if("dummyHeightMap"in r){let{drawToTerrainHeightMap:t,heightMap:i,heightMapBounds:s,dummyHeightMap:o,terrainCover:n,useTerrainHeightMap:a,terrainSkipRender:l}=r,{project_uCommonOrigin:f}=e,c=l?x.SKIP:x.NONE,u=o,_=null;if(t)c=x.WRITE_HEIGHT_MAP,_=s;else if(a&&i)c=x.USE_HEIGHT_MAP,u=i,_=s;else if(n){let p=r.picking?.isActive;u=p?n.getPickingFramebuffer():n.getRenderFramebuffer(),p&&(c=x.SKIP),u?(c=c===x.SKIP?x.USE_COVER_ONLY:x.USE_COVER,_=n.bounds):u=o}return{terrain_mode:c,terrain_map:u,terrain_bounds:_?[_[0]-f[0],_[1]-f[1],_[2]-_[0],_[3]-_[1]]:[0,0,0,0]}}return null}};function q(r,e){return r.createFramebuffer({id:e.id,colorAttachments:[r.createTexture({...e.float&&{format:"rgba32float",type:5126},mipmaps:!1,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}})]})}var _e=class{constructor(e){this.isDirty=!0,this.renderViewport=null,this.bounds=null,this.layers=[],this.targetBounds=null,this.targetBoundsCommon=null,this.targetLayer=e,this.tile=bt(e)}get id(){return this.targetLayer.id}get isActive(){return Boolean(this.targetLayer.getCurrentLayer())}shouldUpdate({targetLayer:e,viewport:t,layers:i,layerNeedsRedraw:s}){e&&(this.targetLayer=e);let o=t?this._updateViewport(t):!1,n=i?this._updateLayers(i):!1;if(s){for(let a of this.layers)if(s[a]){n=!0;break}}return n||o}_updateLayers(e){let t=!1;if(e=this.tile?pi(this.tile,e):e,e.length!==this.layers.length)t=!0;else for(let i=0;i<e.length;i++)if(e[i].id!==this.layers[i]){t=!0;break}return t&&(this.layers=e.map(i=>i.id)),t}_updateViewport(e){let t=this.targetLayer,i=!1;if(this.tile&&"boundingBox"in this.tile){if(!this.targetBounds){i=!0,this.targetBounds=this.tile.boundingBox;let o=e.projectPosition(this.targetBounds[0]),n=e.projectPosition(this.targetBounds[1]);this.targetBoundsCommon=[o[0],o[1],n[0],n[1]]}}else this.targetBounds!==t.getBounds()&&(i=!0,this.targetBounds=t.getBounds(),this.targetBoundsCommon=E([t],e));if(!this.targetBoundsCommon)return!1;let s=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{let o=this.renderViewport?.zoom;i=i||s!==o;let n=F(this.targetBoundsCommon,e),a=this.bounds;i=i||!a||n.some((l,f)=>l!==a[f]),this.bounds=n}return i&&(this.renderViewport=M({bounds:this.bounds,zoom:s,viewport:e})),i}getRenderFramebuffer(){return!this.renderViewport||this.layers.length===0?null:(this.fbo||(this.fbo=q(this.targetLayer.context.device,{id:this.id})),this.fbo)}getPickingFramebuffer(){return!this.renderViewport||this.layers.length===0&&!this.targetLayer.props.pickable?null:(this.pickingFbo||(this.pickingFbo=q(this.targetLayer.context.device,{id:`${this.id}-picking`})),this.pickingFbo)}filterLayers(e){return e.filter(({id:t})=>this.layers.includes(t))}delete(){let{fbo:e,pickingFbo:t}=this;e&&(e.colorAttachments[0].destroy(),e.destroy()),t&&(t.colorAttachments[0].destroy(),t.destroy())}};function pi(r,e){return e.filter(t=>{let i=bt(t);return i?di(r.boundingBox,i.boundingBox):!0})}function bt(r){for(;r;){let{tile:e}=r.props;if(e)return e;r=r.parent}return null}function di(r,e){return r&&e?r[0][0]<e[1][0]&&e[0][0]<r[1][0]&&r[0][1]<e[1][1]&&e[0][1]<r[1][1]:!1}var At=d(m(),1),pe=class extends At._LayersPass{getRenderableLayers(e,t){let{layers:i}=t,s=[],o=this._getDrawLayerParams(e,t,!0);for(let n=0;n<i.length;n++){let a=i[n];!a.isComposite&&o[n].shouldDrawLayer&&s.push(a)}return s}renderHeightMap(e,t){let i=e.getRenderFramebuffer(),s=e.renderViewport;!i||!s||(i.resize(s),this.device.withParametersWebGL({clearColor:[0,0,0,0],blend:!0,blendFunc:[1,1],blendEquation:32776,depthTest:!1},()=>this.render({...t,target:i,pass:"terrain-height-map",layers:t.layers,viewports:[s],effects:[]})))}renderTerrainCover(e,t){let i=e.getRenderFramebuffer(),s=e.renderViewport;if(!i||!s)return;let o=e.filterLayers(t.layers);i.resize(s),this.device.withParametersWebGL({clearColor:[0,0,0,0],depthTest:!1},()=>this.render({...t,target:i,pass:`terrain-cover-${e.id}`,layers:o,effects:[],viewports:[s]}))}};var Et=d(m(),1),de=class extends Et._PickLayersPass{constructor(){super(...arguments),this.drawParameters={}}getRenderableLayers(e,t){let{layers:i}=t,s=[];this.drawParameters={},this._resetColorEncoder(t.pickZ);let o=this._getDrawLayerParams(e,t);for(let n=0;n<i.length;n++){let a=i[n];!a.isComposite&&o[n].shouldDrawLayer&&(s.push(a),this.drawParameters[a.id]=o[n].layerParameters)}return s}renderTerrainCover(e,t){let i=e.getPickingFramebuffer(),s=e.renderViewport;if(!i||!s)return;let o=e.filterLayers(t.layers),n=e.targetLayer;n.props.pickable&&o.unshift(n),i.resize(s),this.device.withParametersWebGL({depthTest:!1},()=>this.render({...t,pickingFBO:i,pass:`terrain-cover-picking-${e.id}`,layers:o,effects:[],viewports:[s],cullRect:void 0,deviceRect:s,pickZ:!1}))}getLayerParameters(e,t,i){if(this.drawParameters[e.id])return this.drawParameters[e.id];let s=super.getLayerParameters(e,t,i);return s.blend=!0,s}};var Mt=2048,W=class{static isSupported(e){return e.isTextureFormatRenderable("rgba32float")}constructor(e){this.renderViewport=null,this.bounds=null,this.layers=[],this.layersBounds=[],this.layersBoundsCommon=null,this.lastViewport=null,this.device=e}getRenderFramebuffer(){return this.renderViewport?(this.fbo||(this.fbo=q(this.device,{id:"height-map",float:!0})),this.fbo):null}shouldUpdate({layers:e,viewport:t}){let i=e.length!==this.layers.length||e.some((o,n)=>o!==this.layers[n]||o.props.transitions||o.getBounds()!==this.layersBounds[n]);i&&(this.layers=e,this.layersBounds=e.map(o=>o.getBounds()),this.layersBoundsCommon=E(e,t));let s=!this.lastViewport||!t.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(i||s){let o=F(this.layersBoundsCommon,t);if(o[2]<=o[0]||o[3]<=o[1])return this.renderViewport=null,!1;this.bounds=o,this.lastViewport=t;let n=t.scale,a=(o[2]-o[0])*n,l=(o[3]-o[1])*n;return this.renderViewport=a>0||l>0?M({bounds:[t.center[0]-1,t.center[1]-1,t.center[0]+1,t.center[1]+1],zoom:t.zoom,width:Math.min(a,Mt),height:Math.min(l,Mt),viewport:t}):null,!0}return!1}delete(){this.fbo&&(this.fbo.colorAttachments[0].delete(),this.fbo.delete())}};var me=class{constructor(){this.id="terrain-effect",this.props=null,this.useInPicking=!0,this.isPicking=!1,this.isDrapingEnabled=!1,this.terrainCovers=new Map}initialize(e){this.dummyHeightMap=e.createTexture({width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new pe(e,{id:"terrain"}),this.terrainPickingPass=new de(e,{id:"terrain-picking"}),W.isSupported(e)?this.heightMap=new W(e):he.log.warn("Terrain offset mode is not supported by this browser")(),(0,he.getShaderAssembler)().addDefaultModule(ue)}preRender(e,t){if(!this.dummyHeightMap){this.initialize(e);for(let f of t.layers)f.props.operation.includes("terrain")&&f.setChangeFlags({extensionsChanged:!0})}if(t.pickZ){this.isDrapingEnabled=!1;return}let{viewports:i}=t,s=t.pass.startsWith("picking");this.isPicking=s,this.isDrapingEnabled=!0;let o=i[0],n=(s?this.terrainPickingPass:this.terrainPass).getRenderableLayers(o,t),a=n.filter(f=>f.props.operation.includes("terrain"));if(a.length===0)return;s||n.filter(c=>c.state.terrainDrawMode==="offset").length>0&&this._updateHeightMap(a,o,t);let l=n.filter(f=>f.state.terrainDrawMode==="drape");this._updateTerrainCovers(a,l,o,t)}getModuleParameters(e){let{terrainDrawMode:t}=e.state;return{heightMap:this.heightMap?.getRenderFramebuffer(),heightMapBounds:this.heightMap?.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:this.isDrapingEnabled?this.terrainCovers.get(e.id):null,useTerrainHeightMap:t==="offset",terrainSkipRender:t==="drape"||!e.props.operation.includes("draw")}}cleanup(){this.dummyHeightMap&&(this.dummyHeightMap.delete(),this.dummyHeightMap=void 0),this.heightMap&&(this.heightMap.delete(),this.heightMap=void 0);for(let e of this.terrainCovers.values())e.delete();this.terrainCovers.clear()}_updateHeightMap(e,t,i){!this.heightMap||!this.heightMap.shouldUpdate({layers:e,viewport:t})||this.terrainPass.renderHeightMap(this.heightMap,{...i,layers:e,moduleParameters:{heightMapBounds:this.heightMap.bounds,dummyHeightMap:this.dummyHeightMap,devicePixelRatio:1,drawToTerrainHeightMap:!0}})}_updateTerrainCovers(e,t,i,s){let o={};for(let n of t)n.state.terrainCoverNeedsRedraw&&(o[n.id]=!0,n.state.terrainCoverNeedsRedraw=!1);for(let n of this.terrainCovers.values())n.isDirty=n.isDirty||n.shouldUpdate({layerNeedsRedraw:o});for(let n of e)this._updateTerrainCover(n,t,i,s);this.isPicking||this._pruneTerrainCovers()}_updateTerrainCover(e,t,i,s){let o=this.isPicking?this.terrainPickingPass:this.terrainPass,n=this.terrainCovers.get(e.id);n||(n=new _e(e),this.terrainCovers.set(e.id,n));try{let a=n.shouldUpdate({targetLayer:e,viewport:i,layers:t});(this.isPicking||n.isDirty||a)&&(o.renderTerrainCover(n,{...s,layers:t,moduleParameters:{dummyHeightMap:this.dummyHeightMap,terrainSkipRender:!1,devicePixelRatio:1}}),this.isPicking||(n.isDirty=!1))}catch(a){e.raiseError(a,`Error rendering terrain cover ${n.id}`)}}_pruneTerrainCovers(){let e=[];for(let[t,i]of this.terrainCovers)i.isActive||e.push(t);for(let t of e)this.terrainCovers.delete(t)}};var mi={terrainDrawMode:void 0},ve=class extends Ft.LayerExtension{getShaders(){return{modules:[ue]}}initializeState(){this.context.deck?._addDefaultEffect(new me)}updateState(e){let{props:t,oldProps:i}=e;if(this.state.terrainDrawMode&&t.terrainDrawMode===i.terrainDrawMode&&t.extruded===i.extruded)return;let{terrainDrawMode:s}=t;if(!s){let o=this.props.extruded,n=this.getAttributeManager()?.attributes,a=n&&"instancePositions"in n;s=o||a?"offset":"drape"}this.setState({terrainDrawMode:s})}onNeedsRedraw(){let e=this.state;e.terrainDrawMode==="drape"&&(e.terrainCoverNeedsRedraw=!0)}},H=ve;(()=>{ve.defaultProps=mi})(),(()=>{ve.extensionName="TerrainExtension"})();return Bt(Y);})();
|
|
1396
1205
|
return __exports__;
|
|
1397
1206
|
});
|