@cortex-js/compute-engine 0.55.3 → 0.55.5
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/compile.esm.js +613 -32
- package/dist/compile.min.esm.js +492 -70
- package/dist/compile.min.umd.cjs +492 -70
- package/dist/compile.umd.cjs +613 -32
- package/dist/compute-engine.esm.js +656 -44
- package/dist/compute-engine.min.esm.js +485 -63
- package/dist/compute-engine.min.umd.cjs +484 -62
- package/dist/compute-engine.umd.cjs +656 -44
- package/dist/core.esm.js +654 -43
- package/dist/core.min.esm.js +483 -61
- package/dist/core.min.umd.cjs +483 -61
- package/dist/core.umd.cjs +654 -43
- package/dist/interval.esm.js +2 -2
- package/dist/interval.min.esm.js +2 -2
- package/dist/interval.min.umd.cjs +2 -2
- package/dist/interval.umd.cjs +2 -2
- package/dist/latex-syntax.esm.js +43 -13
- package/dist/latex-syntax.min.esm.js +5 -5
- package/dist/latex-syntax.min.umd.cjs +5 -5
- package/dist/latex-syntax.umd.cjs +43 -13
- package/dist/math-json.esm.js +2 -2
- package/dist/math-json.min.esm.js +2 -2
- package/dist/math-json.min.umd.cjs +2 -2
- package/dist/math-json.umd.cjs +2 -2
- package/dist/numerics.esm.js +2 -2
- package/dist/numerics.min.esm.js +2 -2
- package/dist/numerics.min.umd.cjs +2 -2
- package/dist/numerics.umd.cjs +2 -2
- package/dist/types/big-decimal/big-decimal.d.ts +1 -1
- package/dist/types/big-decimal/index.d.ts +1 -1
- package/dist/types/big-decimal/transcendentals.d.ts +1 -1
- package/dist/types/big-decimal/utils.d.ts +1 -1
- package/dist/types/common/ansi-codes.d.ts +1 -1
- package/dist/types/common/configuration-change.d.ts +1 -1
- package/dist/types/common/fuzzy-string-match.d.ts +1 -1
- package/dist/types/common/grapheme-splitter.d.ts +1 -1
- package/dist/types/common/interruptible.d.ts +1 -1
- package/dist/types/common/one-of.d.ts +1 -1
- package/dist/types/common/signals.d.ts +1 -1
- package/dist/types/common/type/ast-nodes.d.ts +1 -1
- package/dist/types/common/type/boxed-type.d.ts +1 -1
- package/dist/types/common/type/lexer.d.ts +1 -1
- package/dist/types/common/type/parse.d.ts +1 -1
- package/dist/types/common/type/parser.d.ts +1 -1
- package/dist/types/common/type/primitive.d.ts +1 -1
- package/dist/types/common/type/reduce.d.ts +1 -1
- package/dist/types/common/type/serialize.d.ts +1 -1
- package/dist/types/common/type/subtype.d.ts +1 -1
- package/dist/types/common/type/type-builder.d.ts +1 -1
- package/dist/types/common/type/types.d.ts +1 -1
- package/dist/types/common/type/utils.d.ts +1 -1
- package/dist/types/common/utils.d.ts +1 -1
- package/dist/types/compile.d.ts +1 -1
- package/dist/types/compute-engine/assume.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/abstract-boxed-expression.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/apply.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/arithmetic-add.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/arithmetic-mul-div.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/arithmetic-power.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/ascii-math.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/box.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-dictionary.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-function.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-operator-definition.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-patterns.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-string.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-symbol.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-tensor.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-value-definition.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/cache.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/canonical-utils.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/canonical.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/compare.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/constants.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/expand.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/expression-map.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/factor.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/flatten.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/hold.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/inequality-bounds.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/init-lazy-refs.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/invisible-operator.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/match.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/negate.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/numerics.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/order.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/pattern-utils.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/polynomial-degree.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/polynomials.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/predicates.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/rules.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/serialize.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/sgn.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/simplify.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/solve-linear-system.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/solve.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/stochastic-equal.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/trigonometry.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/type-guards.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/utils.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/validate.d.ts +1 -1
- package/dist/types/compute-engine/collection-utils.d.ts +1 -1
- package/dist/types/compute-engine/compilation/base-compiler.d.ts +1 -1
- package/dist/types/compute-engine/compilation/compile-expression.d.ts +3 -2
- package/dist/types/compute-engine/compilation/constant-folding.d.ts +1 -1
- package/dist/types/compute-engine/compilation/fractal-orbit.d.ts +19 -0
- package/dist/types/compute-engine/compilation/glsl-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/gpu-target.d.ts +54 -1
- package/dist/types/compute-engine/compilation/interval-javascript-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/javascript-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/python-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/types.d.ts +67 -1
- package/dist/types/compute-engine/compilation/wgsl-target.d.ts +1 -1
- package/dist/types/compute-engine/cost-function.d.ts +1 -1
- package/dist/types/compute-engine/engine-assumptions.d.ts +1 -1
- package/dist/types/compute-engine/engine-cache.d.ts +1 -1
- package/dist/types/compute-engine/engine-common-symbols.d.ts +1 -1
- package/dist/types/compute-engine/engine-compilation-targets.d.ts +1 -1
- package/dist/types/compute-engine/engine-configuration-lifecycle.d.ts +1 -1
- package/dist/types/compute-engine/engine-declarations.d.ts +1 -1
- package/dist/types/compute-engine/engine-expression-entrypoints.d.ts +1 -1
- package/dist/types/compute-engine/engine-extension-contracts.d.ts +1 -1
- package/dist/types/compute-engine/engine-library-bootstrap.d.ts +1 -1
- package/dist/types/compute-engine/engine-numeric-configuration.d.ts +1 -1
- package/dist/types/compute-engine/engine-runtime-state.d.ts +1 -1
- package/dist/types/compute-engine/engine-scope.d.ts +1 -1
- package/dist/types/compute-engine/engine-sequences.d.ts +1 -1
- package/dist/types/compute-engine/engine-simplification-rules.d.ts +1 -1
- package/dist/types/compute-engine/engine-startup-coordinator.d.ts +1 -1
- package/dist/types/compute-engine/engine-type-resolver.d.ts +1 -1
- package/dist/types/compute-engine/engine-validation-entrypoints.d.ts +1 -1
- package/dist/types/compute-engine/free-functions.d.ts +1 -1
- package/dist/types/compute-engine/function-utils.d.ts +1 -1
- package/dist/types/compute-engine/global-types.d.ts +1 -1
- package/dist/types/compute-engine/index.d.ts +3 -2
- package/dist/types/compute-engine/interval/arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/interval/comparison.d.ts +1 -1
- package/dist/types/compute-engine/interval/elementary.d.ts +1 -1
- package/dist/types/compute-engine/interval/index.d.ts +1 -1
- package/dist/types/compute-engine/interval/trigonometric.d.ts +1 -1
- package/dist/types/compute-engine/interval/types.d.ts +1 -1
- package/dist/types/compute-engine/interval/util.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/default-dictionary.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-complex.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-linear-algebra.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-relational-operators.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-statistics.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-units.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/indexed-types.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/latex-syntax.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/parse-number.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/parse-symbol.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/parse.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serialize-dms.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serializer.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/types.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/utils.d.ts +1 -1
- package/dist/types/compute-engine/library/arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/library/calculus.d.ts +1 -1
- package/dist/types/compute-engine/library/collections.d.ts +1 -1
- package/dist/types/compute-engine/library/colors.d.ts +1 -1
- package/dist/types/compute-engine/library/combinatorics.d.ts +1 -1
- package/dist/types/compute-engine/library/complex.d.ts +1 -1
- package/dist/types/compute-engine/library/control-structures.d.ts +1 -1
- package/dist/types/compute-engine/library/core.d.ts +1 -1
- package/dist/types/compute-engine/library/fractals.d.ts +1 -1
- package/dist/types/compute-engine/library/library.d.ts +1 -1
- package/dist/types/compute-engine/library/linear-algebra.d.ts +1 -1
- package/dist/types/compute-engine/library/logic-analysis.d.ts +1 -1
- package/dist/types/compute-engine/library/logic.d.ts +1 -1
- package/dist/types/compute-engine/library/number-theory.d.ts +1 -1
- package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
- package/dist/types/compute-engine/library/quantity-arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/library/random-expression.d.ts +1 -1
- package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
- package/dist/types/compute-engine/library/sets.d.ts +1 -1
- package/dist/types/compute-engine/library/statistics.d.ts +1 -1
- package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
- package/dist/types/compute-engine/library/type-handlers.d.ts +1 -1
- package/dist/types/compute-engine/library/unit-data.d.ts +1 -1
- package/dist/types/compute-engine/library/units.d.ts +1 -1
- package/dist/types/compute-engine/library/utils.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/big-numeric-value.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/exact-numeric-value.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/machine-numeric-value.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/types.d.ts +1 -1
- package/dist/types/compute-engine/numerics/bigint.d.ts +1 -1
- package/dist/types/compute-engine/numerics/expression.d.ts +1 -1
- package/dist/types/compute-engine/numerics/interval.d.ts +1 -1
- package/dist/types/compute-engine/numerics/linear-algebra.d.ts +1 -1
- package/dist/types/compute-engine/numerics/monte-carlo.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric-bigint.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric-bignum.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric-complex.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric.d.ts +1 -1
- package/dist/types/compute-engine/numerics/primes.d.ts +1 -1
- package/dist/types/compute-engine/numerics/rationals.d.ts +1 -1
- package/dist/types/compute-engine/numerics/richardson.d.ts +1 -1
- package/dist/types/compute-engine/numerics/special-functions.d.ts +1 -1
- package/dist/types/compute-engine/numerics/statistics.d.ts +1 -1
- package/dist/types/compute-engine/numerics/strings.d.ts +1 -1
- package/dist/types/compute-engine/numerics/types.d.ts +1 -1
- package/dist/types/compute-engine/numerics/unit-data.d.ts +1 -1
- package/dist/types/compute-engine/oeis.d.ts +1 -1
- package/dist/types/compute-engine/sequence.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/antiderivative.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/derivative.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/distribute.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/fu-cost.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/fu-transforms.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/fu.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/logic-utils.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-abs.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-divide.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-factorial.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-hyperbolic.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-infinity.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-log.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-logic.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-power.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-product.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-rules.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-sum.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-trig.d.ts +1 -1
- package/dist/types/compute-engine/tensor/tensor-fields.d.ts +1 -1
- package/dist/types/compute-engine/tensor/tensors.d.ts +1 -1
- package/dist/types/compute-engine/types-definitions.d.ts +1 -1
- package/dist/types/compute-engine/types-engine.d.ts +1 -1
- package/dist/types/compute-engine/types-evaluation.d.ts +1 -1
- package/dist/types/compute-engine/types-expression.d.ts +1 -1
- package/dist/types/compute-engine/types-kernel-evaluation.d.ts +1 -1
- package/dist/types/compute-engine/types-kernel-serialization.d.ts +1 -1
- package/dist/types/compute-engine/types-serialization.d.ts +1 -1
- package/dist/types/compute-engine/types.d.ts +1 -1
- package/dist/types/compute-engine.d.ts +3 -2
- package/dist/types/core.d.ts +1 -1
- package/dist/types/interval.d.ts +1 -1
- package/dist/types/latex-syntax.d.ts +2 -2
- package/dist/types/math-json/symbols.d.ts +1 -1
- package/dist/types/math-json/types.d.ts +1 -1
- package/dist/types/math-json/utils.d.ts +1 -1
- package/dist/types/math-json.d.ts +2 -2
- package/dist/types/numerics.d.ts +1 -1
- package/package.json +3 -3
package/dist/core.umd.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** ComputeEngineCore 0.55.
|
|
1
|
+
/** ComputeEngineCore 0.55.5 */
|
|
2
2
|
(function(global,factory){typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'],factory):(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ComputeEngineCore = {}));})(this, (function (exports) { 'use strict';
|
|
3
3
|
var ComputeEngineCore = (() => {
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -17199,6 +17199,10 @@ var ComputeEngineCore = (() => {
|
|
|
17199
17199
|
parser.nextToken();
|
|
17200
17200
|
continue;
|
|
17201
17201
|
}
|
|
17202
|
+
if (EMOJIS.test(id + token)) {
|
|
17203
|
+
id += parser.nextToken();
|
|
17204
|
+
continue;
|
|
17205
|
+
}
|
|
17202
17206
|
const next = parseSymbolToken(parser, { toplevel: false });
|
|
17203
17207
|
if (next === null) return null;
|
|
17204
17208
|
id += next;
|
|
@@ -17238,6 +17242,7 @@ var ComputeEngineCore = (() => {
|
|
|
17238
17242
|
function matchPrefixedSymbol(parser) {
|
|
17239
17243
|
const prefix = SYMBOL_PREFIX[parser.peek] ?? null;
|
|
17240
17244
|
if (prefix === null) return null;
|
|
17245
|
+
const start = parser.index;
|
|
17241
17246
|
parser.nextToken();
|
|
17242
17247
|
if (parser.match("<{>")) {
|
|
17243
17248
|
let body = "";
|
|
@@ -17258,17 +17263,48 @@ var ComputeEngineCore = (() => {
|
|
|
17258
17263
|
parser.nextToken();
|
|
17259
17264
|
}
|
|
17260
17265
|
body += parseSymbolBody(parser);
|
|
17261
|
-
if (body === null || !parser.match("<}>"))
|
|
17266
|
+
if (body === null || !parser.match("<}>")) {
|
|
17267
|
+
parser.index = start;
|
|
17268
|
+
return null;
|
|
17269
|
+
}
|
|
17262
17270
|
if (prefix === "_upright" && body.length > 1) return body;
|
|
17263
17271
|
return body + prefix;
|
|
17264
17272
|
}
|
|
17273
|
+
parser.index = start;
|
|
17265
17274
|
return null;
|
|
17266
17275
|
}
|
|
17267
17276
|
function parseInvalidSymbol(parser) {
|
|
17268
17277
|
const start = parser.index;
|
|
17269
17278
|
const id = matchPrefixedSymbol(parser);
|
|
17270
|
-
if (id
|
|
17271
|
-
|
|
17279
|
+
if (id !== null) {
|
|
17280
|
+
if (isValidSymbol(id)) return null;
|
|
17281
|
+
return parser.error(["invalid-symbol", { str: validateSymbol(id) }], start);
|
|
17282
|
+
}
|
|
17283
|
+
parser.index = start;
|
|
17284
|
+
const prefix = SYMBOL_PREFIX[parser.peek] ?? null;
|
|
17285
|
+
if (prefix === null) return null;
|
|
17286
|
+
parser.nextToken();
|
|
17287
|
+
if (!parser.match("<{>")) {
|
|
17288
|
+
parser.index = start;
|
|
17289
|
+
return null;
|
|
17290
|
+
}
|
|
17291
|
+
const bodyStart = parser.index;
|
|
17292
|
+
let level = 0;
|
|
17293
|
+
while (!parser.atEnd && !(level === 0 && parser.peek === "<}>")) {
|
|
17294
|
+
if (parser.peek === "<{>") level += 1;
|
|
17295
|
+
if (parser.peek === "<}>") level -= 1;
|
|
17296
|
+
parser.nextToken();
|
|
17297
|
+
}
|
|
17298
|
+
const bodyText = parser.latex(bodyStart, parser.index);
|
|
17299
|
+
if (isValidSymbol(bodyText)) {
|
|
17300
|
+
parser.index = start;
|
|
17301
|
+
return null;
|
|
17302
|
+
}
|
|
17303
|
+
parser.match("<}>");
|
|
17304
|
+
return parser.error(
|
|
17305
|
+
["invalid-symbol", { str: validateSymbol(bodyText) }],
|
|
17306
|
+
start
|
|
17307
|
+
);
|
|
17272
17308
|
}
|
|
17273
17309
|
function parseSymbol(parser) {
|
|
17274
17310
|
if (/^[a-zA-Z]$/.test(parser.peek) || /^\p{XIDS}$/u.test(parser.peek)) {
|
|
@@ -18223,18 +18259,12 @@ var ComputeEngineCore = (() => {
|
|
|
18223
18259
|
this.index = start;
|
|
18224
18260
|
return false;
|
|
18225
18261
|
}
|
|
18226
|
-
|
|
18227
|
-
const useLatexCommand = matchedToken.startsWith("\\");
|
|
18262
|
+
this.nextToken();
|
|
18228
18263
|
if (hasBracedDelimiter && !this.match("<}>")) {
|
|
18229
18264
|
this.index = start;
|
|
18230
18265
|
return false;
|
|
18231
18266
|
}
|
|
18232
|
-
const
|
|
18233
|
-
close[0]
|
|
18234
|
-
];
|
|
18235
|
-
const closeToken = closeTokens.find(
|
|
18236
|
-
(t) => useLatexCommand ? t.startsWith("\\") : !t.startsWith("\\")
|
|
18237
|
-
) ?? closeTokens[0];
|
|
18267
|
+
const closeToken = close[0];
|
|
18238
18268
|
const closeBoundary3 = closePrefix ? hasBracedDelimiter ? [closePrefix, "<{>", closeToken, "<}>"] : [closePrefix, closeToken] : [closeToken];
|
|
18239
18269
|
this.addBoundary(closeBoundary3);
|
|
18240
18270
|
return true;
|
|
@@ -39629,30 +39659,6 @@ ${e.message}
|
|
|
39629
39659
|
"#ae2036",
|
|
39630
39660
|
"#b40426"
|
|
39631
39661
|
];
|
|
39632
|
-
var OCEAN_BALANCE = [
|
|
39633
|
-
"#00441b",
|
|
39634
|
-
"#006d5b",
|
|
39635
|
-
"#1a8c7d",
|
|
39636
|
-
"#2fa394",
|
|
39637
|
-
"#4fb3a3",
|
|
39638
|
-
"#6fc1b3",
|
|
39639
|
-
"#8dcfc3",
|
|
39640
|
-
"#a6dbd1",
|
|
39641
|
-
"#bfe6de",
|
|
39642
|
-
"#d7f0ea",
|
|
39643
|
-
"#f7f7f7",
|
|
39644
|
-
"#eeeeee",
|
|
39645
|
-
"#ddd8e6",
|
|
39646
|
-
"#c7bcda",
|
|
39647
|
-
"#b3a0d0",
|
|
39648
|
-
"#9f86c7",
|
|
39649
|
-
"#8d6dbd",
|
|
39650
|
-
"#7b56b1",
|
|
39651
|
-
"#6a42a3",
|
|
39652
|
-
"#5a3093",
|
|
39653
|
-
"#4a1f82",
|
|
39654
|
-
"#3b0f70"
|
|
39655
|
-
];
|
|
39656
39662
|
var reversePalette = (palette) => palette.slice().reverse();
|
|
39657
39663
|
var DIVERGING_PALETTES = {
|
|
39658
39664
|
roma: ROMA,
|
|
@@ -39664,9 +39670,7 @@ ${e.message}
|
|
|
39664
39670
|
rdbu: RDBU,
|
|
39665
39671
|
"rdbu-reversed": reversePalette(RDBU),
|
|
39666
39672
|
coolwarm: COOLWARM,
|
|
39667
|
-
"coolwarm-reversed": reversePalette(COOLWARM)
|
|
39668
|
-
"ocean-balance": OCEAN_BALANCE,
|
|
39669
|
-
"ocean-balance-reversed": reversePalette(OCEAN_BALANCE)
|
|
39673
|
+
"coolwarm-reversed": reversePalette(COOLWARM)
|
|
39670
39674
|
};
|
|
39671
39675
|
var TURBO = [
|
|
39672
39676
|
"#30123b",
|
|
@@ -41750,6 +41754,40 @@ ${e.message}
|
|
|
41750
41754
|
"#eeeeee",
|
|
41751
41755
|
"#ffffff"
|
|
41752
41756
|
];
|
|
41757
|
+
var CMOCEAN_PHASE = [
|
|
41758
|
+
"#a8780d",
|
|
41759
|
+
"#b3701b",
|
|
41760
|
+
"#be6828",
|
|
41761
|
+
"#c75f35",
|
|
41762
|
+
"#cf5643",
|
|
41763
|
+
"#d54b53",
|
|
41764
|
+
"#db4066",
|
|
41765
|
+
"#de357b",
|
|
41766
|
+
"#df2a93",
|
|
41767
|
+
"#dc25ad",
|
|
41768
|
+
"#d529c4",
|
|
41769
|
+
"#cc34d7",
|
|
41770
|
+
"#c041e5",
|
|
41771
|
+
"#b24fef",
|
|
41772
|
+
"#a25cf3",
|
|
41773
|
+
"#9168f4",
|
|
41774
|
+
"#7d73f0",
|
|
41775
|
+
"#687ce8",
|
|
41776
|
+
"#5285dc",
|
|
41777
|
+
"#3d8bcd",
|
|
41778
|
+
"#2c90bc",
|
|
41779
|
+
"#2093ac",
|
|
41780
|
+
"#19959c",
|
|
41781
|
+
"#12978c",
|
|
41782
|
+
"#0c987c",
|
|
41783
|
+
"#119a69",
|
|
41784
|
+
"#249a52",
|
|
41785
|
+
"#409839",
|
|
41786
|
+
"#5e9420",
|
|
41787
|
+
"#778d12",
|
|
41788
|
+
"#8b860d",
|
|
41789
|
+
"#9b7f0d"
|
|
41790
|
+
];
|
|
41753
41791
|
var reversePalette2 = (palette) => palette.slice().reverse();
|
|
41754
41792
|
var SEQUENTIAL_PALETTES = {
|
|
41755
41793
|
turbo: TURBO,
|
|
@@ -41773,7 +41811,9 @@ ${e.message}
|
|
|
41773
41811
|
"rocket-reversed": reversePalette2(ROCKET),
|
|
41774
41812
|
mako: MAKO,
|
|
41775
41813
|
// blue to teal
|
|
41776
|
-
"mako-reversed": reversePalette2(MAKO)
|
|
41814
|
+
"mako-reversed": reversePalette2(MAKO),
|
|
41815
|
+
"cmocean-phase": CMOCEAN_PHASE,
|
|
41816
|
+
"cmocean-phase-reversed": reversePalette2(CMOCEAN_PHASE)
|
|
41777
41817
|
};
|
|
41778
41818
|
|
|
41779
41819
|
// src/compute-engine/library/colors.ts
|
|
@@ -54770,7 +54810,8 @@ Error in definition of "${name}"`,
|
|
|
54770
54810
|
vars: options?.vars,
|
|
54771
54811
|
imports: options?.imports,
|
|
54772
54812
|
preamble: options?.preamble,
|
|
54773
|
-
realOnly: options?.realOnly
|
|
54813
|
+
realOnly: options?.realOnly,
|
|
54814
|
+
hints: options?.hints
|
|
54774
54815
|
});
|
|
54775
54816
|
} catch (e) {
|
|
54776
54817
|
if (options?.fallback ?? true) {
|
|
@@ -61270,6 +61311,43 @@ Error in definition of "${name}"`,
|
|
|
61270
61311
|
return b;
|
|
61271
61312
|
}
|
|
61272
61313
|
|
|
61314
|
+
// src/compute-engine/compilation/fractal-orbit.ts
|
|
61315
|
+
function toBigDecimal(v) {
|
|
61316
|
+
if (typeof v === "object" && "hi" in v)
|
|
61317
|
+
return new BigDecimal(v.hi).add(new BigDecimal(v.lo));
|
|
61318
|
+
return new BigDecimal(v);
|
|
61319
|
+
}
|
|
61320
|
+
function hpToNumber(v) {
|
|
61321
|
+
if (typeof v === "number") return v;
|
|
61322
|
+
if (typeof v === "string") return Number(v);
|
|
61323
|
+
return v.hi + v.lo;
|
|
61324
|
+
}
|
|
61325
|
+
function computeReferenceOrbit(center, maxIter, precision) {
|
|
61326
|
+
const prevPrecision = BigDecimal.precision;
|
|
61327
|
+
BigDecimal.precision = precision;
|
|
61328
|
+
try {
|
|
61329
|
+
const cr = toBigDecimal(center[0]);
|
|
61330
|
+
const ci = toBigDecimal(center[1]);
|
|
61331
|
+
let zr = BigDecimal.ZERO;
|
|
61332
|
+
let zi = BigDecimal.ZERO;
|
|
61333
|
+
const ESCAPE = new BigDecimal(256);
|
|
61334
|
+
const points = [];
|
|
61335
|
+
for (let i = 0; i < maxIter; i++) {
|
|
61336
|
+
points.push(zr.toNumber(), zi.toNumber());
|
|
61337
|
+
const zr2 = zr.mul(zr).toPrecision(precision);
|
|
61338
|
+
const zi2 = zi.mul(zi).toPrecision(precision);
|
|
61339
|
+
const mag2 = zr2.add(zi2);
|
|
61340
|
+
if (mag2.cmp(ESCAPE) > 0) break;
|
|
61341
|
+
const new_zi = zr.mul(zi).toPrecision(precision).mul(2).add(ci);
|
|
61342
|
+
zr = zr2.sub(zi2).add(cr);
|
|
61343
|
+
zi = new_zi;
|
|
61344
|
+
}
|
|
61345
|
+
return new Float32Array(points);
|
|
61346
|
+
} finally {
|
|
61347
|
+
BigDecimal.precision = prevPrecision;
|
|
61348
|
+
}
|
|
61349
|
+
}
|
|
61350
|
+
|
|
61273
61351
|
// src/compute-engine/compilation/gpu-target.ts
|
|
61274
61352
|
var GPU_OPERATORS = {
|
|
61275
61353
|
Add: ["+", 11],
|
|
@@ -61353,6 +61431,13 @@ Error in definition of "${name}"`,
|
|
|
61353
61431
|
];
|
|
61354
61432
|
return lines.join("\n");
|
|
61355
61433
|
}
|
|
61434
|
+
function selectFractalStrategy(target) {
|
|
61435
|
+
const radius = target.hints?.viewport?.radius;
|
|
61436
|
+
if (radius === void 0) return "single";
|
|
61437
|
+
if (radius > 1e-6) return "single";
|
|
61438
|
+
if (radius > 1e-14) return "double";
|
|
61439
|
+
return "perturbation";
|
|
61440
|
+
}
|
|
61356
61441
|
var GPU_FUNCTIONS = {
|
|
61357
61442
|
// Variadic arithmetic (for function-call form, e.g., with vectors)
|
|
61358
61443
|
Add: (args, compile3, target) => {
|
|
@@ -61848,12 +61933,32 @@ Error in definition of "${name}"`,
|
|
|
61848
61933
|
if (c === null || maxIter === null)
|
|
61849
61934
|
throw new Error("Mandelbrot: missing arguments");
|
|
61850
61935
|
const iterCode = compileIntArg(maxIter, compile3, target);
|
|
61936
|
+
const strategy = selectFractalStrategy(target);
|
|
61937
|
+
if (strategy === "double") {
|
|
61938
|
+
const dpCoord = target?.language === "wgsl" ? "_dp_coord(v_uv)" : "_dp_coord()";
|
|
61939
|
+
return `_fractal_mandelbrot_dp(${dpCoord}, ${iterCode})`;
|
|
61940
|
+
}
|
|
61941
|
+
if (strategy === "perturbation") {
|
|
61942
|
+
const ptDelta = target?.language === "wgsl" ? "_pt_delta(v_uv)" : "_pt_delta()";
|
|
61943
|
+
return `_fractal_mandelbrot_pt(${ptDelta}, ${iterCode})`;
|
|
61944
|
+
}
|
|
61851
61945
|
return `_fractal_mandelbrot(${compile3(c)}, ${iterCode})`;
|
|
61852
61946
|
},
|
|
61853
61947
|
Julia: ([z, c, maxIter], compile3, target) => {
|
|
61854
61948
|
if (z === null || c === null || maxIter === null)
|
|
61855
61949
|
throw new Error("Julia: missing arguments");
|
|
61856
61950
|
const iterCode = compileIntArg(maxIter, compile3, target);
|
|
61951
|
+
const strategy = selectFractalStrategy(target);
|
|
61952
|
+
if (strategy === "double") {
|
|
61953
|
+
const dpCoord = target?.language === "wgsl" ? "_dp_coord(v_uv)" : "_dp_coord()";
|
|
61954
|
+
const cCode = compile3(c);
|
|
61955
|
+
return `_fractal_julia_dp(${dpCoord}, vec4(${cCode}, vec2(0.0)), ${iterCode})`;
|
|
61956
|
+
}
|
|
61957
|
+
if (strategy === "perturbation") {
|
|
61958
|
+
const ptDelta = target?.language === "wgsl" ? "_pt_delta(v_uv)" : "_pt_delta()";
|
|
61959
|
+
const cCode = compile3(c);
|
|
61960
|
+
return `_fractal_julia_pt(${ptDelta}, ${cCode}, ${iterCode})`;
|
|
61961
|
+
}
|
|
61857
61962
|
return `_fractal_julia(${compile3(z)}, ${compile3(c)}, ${iterCode})`;
|
|
61858
61963
|
},
|
|
61859
61964
|
// Vector/Matrix operations
|
|
@@ -62450,6 +62555,232 @@ fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
|
|
|
62450
62555
|
for (var k2: i32 = 2; k2 <= M; k2 += 2) { norm += 2.0 * vals[k2]; }
|
|
62451
62556
|
return sgn * vals[n] / norm;
|
|
62452
62557
|
}
|
|
62558
|
+
`;
|
|
62559
|
+
var GPU_DS_ARITHMETIC_PREAMBLE_GLSL = `
|
|
62560
|
+
// Split a float into high and low parts for exact multiplication
|
|
62561
|
+
vec2 ds_split(float a) {
|
|
62562
|
+
const float SPLIT = 4097.0; // 2^12 + 1
|
|
62563
|
+
float t = SPLIT * a;
|
|
62564
|
+
float hi = t - (t - a);
|
|
62565
|
+
float lo = a - hi;
|
|
62566
|
+
return vec2(hi, lo);
|
|
62567
|
+
}
|
|
62568
|
+
|
|
62569
|
+
// Create a double-single from a single float
|
|
62570
|
+
vec2 ds_from(float a) {
|
|
62571
|
+
return vec2(a, 0.0);
|
|
62572
|
+
}
|
|
62573
|
+
|
|
62574
|
+
// Error-free addition (Knuth TwoSum)
|
|
62575
|
+
vec2 ds_add(vec2 a, vec2 b) {
|
|
62576
|
+
float s = a.x + b.x;
|
|
62577
|
+
float v = s - a.x;
|
|
62578
|
+
float e = (a.x - (s - v)) + (b.x - v);
|
|
62579
|
+
float lo = (a.y + b.y) + e;
|
|
62580
|
+
float hi = s + lo;
|
|
62581
|
+
lo = lo - (hi - s);
|
|
62582
|
+
return vec2(hi, lo);
|
|
62583
|
+
}
|
|
62584
|
+
|
|
62585
|
+
// Double-single subtraction
|
|
62586
|
+
vec2 ds_sub(vec2 a, vec2 b) {
|
|
62587
|
+
return ds_add(a, vec2(-b.x, -b.y));
|
|
62588
|
+
}
|
|
62589
|
+
|
|
62590
|
+
// Error-free multiplication (Dekker TwoProduct)
|
|
62591
|
+
vec2 ds_mul(vec2 a, vec2 b) {
|
|
62592
|
+
float p = a.x * b.x;
|
|
62593
|
+
vec2 sa = ds_split(a.x);
|
|
62594
|
+
vec2 sb = ds_split(b.x);
|
|
62595
|
+
float err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
|
|
62596
|
+
err += a.x * b.y + a.y * b.x;
|
|
62597
|
+
float hi = p + err;
|
|
62598
|
+
float lo = err - (hi - p);
|
|
62599
|
+
return vec2(hi, lo);
|
|
62600
|
+
}
|
|
62601
|
+
|
|
62602
|
+
// Optimized self-multiply
|
|
62603
|
+
vec2 ds_sqr(vec2 a) {
|
|
62604
|
+
float p = a.x * a.x;
|
|
62605
|
+
vec2 sa = ds_split(a.x);
|
|
62606
|
+
float err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
|
|
62607
|
+
err += 2.0 * a.x * a.y;
|
|
62608
|
+
float hi = p + err;
|
|
62609
|
+
float lo = err - (hi - p);
|
|
62610
|
+
return vec2(hi, lo);
|
|
62611
|
+
}
|
|
62612
|
+
|
|
62613
|
+
// Compare magnitude: returns -1, 0, or 1
|
|
62614
|
+
float ds_cmp(vec2 a, vec2 b) {
|
|
62615
|
+
float d = a.x - b.x;
|
|
62616
|
+
if (d != 0.0) return sign(d);
|
|
62617
|
+
return sign(a.y - b.y);
|
|
62618
|
+
}
|
|
62619
|
+
`;
|
|
62620
|
+
var GPU_DS_ARITHMETIC_PREAMBLE_WGSL = `
|
|
62621
|
+
fn ds_split(a: f32) -> vec2f {
|
|
62622
|
+
const SPLIT: f32 = 4097.0;
|
|
62623
|
+
let t = SPLIT * a;
|
|
62624
|
+
let hi = t - (t - a);
|
|
62625
|
+
let lo = a - hi;
|
|
62626
|
+
return vec2f(hi, lo);
|
|
62627
|
+
}
|
|
62628
|
+
|
|
62629
|
+
fn ds_from(a: f32) -> vec2f {
|
|
62630
|
+
return vec2f(a, 0.0);
|
|
62631
|
+
}
|
|
62632
|
+
|
|
62633
|
+
fn ds_add(a: vec2f, b: vec2f) -> vec2f {
|
|
62634
|
+
let s = a.x + b.x;
|
|
62635
|
+
let v = s - a.x;
|
|
62636
|
+
let e = (a.x - (s - v)) + (b.x - v);
|
|
62637
|
+
let lo_t = (a.y + b.y) + e;
|
|
62638
|
+
let hi = s + lo_t;
|
|
62639
|
+
let lo = lo_t - (hi - s);
|
|
62640
|
+
return vec2f(hi, lo);
|
|
62641
|
+
}
|
|
62642
|
+
|
|
62643
|
+
fn ds_sub(a: vec2f, b: vec2f) -> vec2f {
|
|
62644
|
+
return ds_add(a, vec2f(-b.x, -b.y));
|
|
62645
|
+
}
|
|
62646
|
+
|
|
62647
|
+
fn ds_mul(a: vec2f, b: vec2f) -> vec2f {
|
|
62648
|
+
let p = a.x * b.x;
|
|
62649
|
+
let sa = ds_split(a.x);
|
|
62650
|
+
let sb = ds_split(b.x);
|
|
62651
|
+
var err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
|
|
62652
|
+
err += a.x * b.y + a.y * b.x;
|
|
62653
|
+
let hi = p + err;
|
|
62654
|
+
let lo = err - (hi - p);
|
|
62655
|
+
return vec2f(hi, lo);
|
|
62656
|
+
}
|
|
62657
|
+
|
|
62658
|
+
fn ds_sqr(a: vec2f) -> vec2f {
|
|
62659
|
+
let p = a.x * a.x;
|
|
62660
|
+
let sa = ds_split(a.x);
|
|
62661
|
+
var err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
|
|
62662
|
+
err += 2.0 * a.x * a.y;
|
|
62663
|
+
let hi = p + err;
|
|
62664
|
+
let lo = err - (hi - p);
|
|
62665
|
+
return vec2f(hi, lo);
|
|
62666
|
+
}
|
|
62667
|
+
|
|
62668
|
+
fn ds_cmp(a: vec2f, b: vec2f) -> f32 {
|
|
62669
|
+
let d = a.x - b.x;
|
|
62670
|
+
if (d != 0.0) { return sign(d); }
|
|
62671
|
+
return sign(a.y - b.y);
|
|
62672
|
+
}
|
|
62673
|
+
`;
|
|
62674
|
+
var GPU_FRACTAL_DP_PREAMBLE_GLSL = `
|
|
62675
|
+
uniform float _dp_cx_hi;
|
|
62676
|
+
uniform float _dp_cx_lo;
|
|
62677
|
+
uniform float _dp_cy_hi;
|
|
62678
|
+
uniform float _dp_cy_lo;
|
|
62679
|
+
uniform float _dp_w;
|
|
62680
|
+
uniform float _dp_h;
|
|
62681
|
+
|
|
62682
|
+
vec4 _dp_coord() {
|
|
62683
|
+
// Per-pixel offset from center \u2014 small, so float-precise
|
|
62684
|
+
float dx = (v_uv.x - 0.5) * _dp_w;
|
|
62685
|
+
float dy = (v_uv.y - 0.5) * _dp_h;
|
|
62686
|
+
// Combine center (hi+lo) + delta with emulated double precision
|
|
62687
|
+
vec2 cre = ds_add(vec2(_dp_cx_hi, _dp_cx_lo), ds_from(dx));
|
|
62688
|
+
vec2 cim = ds_add(vec2(_dp_cy_hi, _dp_cy_lo), ds_from(dy));
|
|
62689
|
+
return vec4(cre.x, cim.x, cre.y, cim.y);
|
|
62690
|
+
}
|
|
62691
|
+
|
|
62692
|
+
float _fractal_mandelbrot_dp(vec4 c, int maxIter) {
|
|
62693
|
+
// c = (re_hi, im_hi, re_lo, im_lo)
|
|
62694
|
+
vec2 cr = vec2(c.x, c.z); // real part as ds
|
|
62695
|
+
vec2 ci = vec2(c.y, c.w); // imag part as ds
|
|
62696
|
+
vec2 zr = vec2(0.0, 0.0);
|
|
62697
|
+
vec2 zi = vec2(0.0, 0.0);
|
|
62698
|
+
for (int i = 0; i < maxIter; i++) {
|
|
62699
|
+
vec2 zr2 = ds_sqr(zr);
|
|
62700
|
+
vec2 zi2 = ds_sqr(zi);
|
|
62701
|
+
// |z|^2 > 4.0 ?
|
|
62702
|
+
vec2 mag2 = ds_add(zr2, zi2);
|
|
62703
|
+
if (mag2.x > 4.0)
|
|
62704
|
+
return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62705
|
+
// z = z^2 + c
|
|
62706
|
+
vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci); // 2*zr*zi + ci
|
|
62707
|
+
zr = ds_add(ds_sub(zr2, zi2), cr); // zr^2 - zi^2 + cr
|
|
62708
|
+
zi = new_zi;
|
|
62709
|
+
}
|
|
62710
|
+
return 1.0;
|
|
62711
|
+
}
|
|
62712
|
+
|
|
62713
|
+
float _fractal_julia_dp(vec4 z_in, vec4 c, int maxIter) {
|
|
62714
|
+
vec2 zr = vec2(z_in.x, z_in.z);
|
|
62715
|
+
vec2 zi = vec2(z_in.y, z_in.w);
|
|
62716
|
+
vec2 cr = vec2(c.x, c.z);
|
|
62717
|
+
vec2 ci = vec2(c.y, c.w);
|
|
62718
|
+
for (int i = 0; i < maxIter; i++) {
|
|
62719
|
+
vec2 zr2 = ds_sqr(zr);
|
|
62720
|
+
vec2 zi2 = ds_sqr(zi);
|
|
62721
|
+
vec2 mag2 = ds_add(zr2, zi2);
|
|
62722
|
+
if (mag2.x > 4.0)
|
|
62723
|
+
return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62724
|
+
vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
62725
|
+
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
62726
|
+
zi = new_zi;
|
|
62727
|
+
}
|
|
62728
|
+
return 1.0;
|
|
62729
|
+
}
|
|
62730
|
+
`;
|
|
62731
|
+
var GPU_FRACTAL_DP_PREAMBLE_WGSL = `
|
|
62732
|
+
@group(0) @binding(10) var<uniform> _dp_cx_hi: f32;
|
|
62733
|
+
@group(0) @binding(11) var<uniform> _dp_cx_lo: f32;
|
|
62734
|
+
@group(0) @binding(12) var<uniform> _dp_cy_hi: f32;
|
|
62735
|
+
@group(0) @binding(13) var<uniform> _dp_cy_lo: f32;
|
|
62736
|
+
@group(0) @binding(14) var<uniform> _dp_w: f32;
|
|
62737
|
+
@group(0) @binding(15) var<uniform> _dp_h: f32;
|
|
62738
|
+
|
|
62739
|
+
fn _dp_coord(uv: vec2f) -> vec4f {
|
|
62740
|
+
let dx = (uv.x - 0.5) * _dp_w;
|
|
62741
|
+
let dy = (uv.y - 0.5) * _dp_h;
|
|
62742
|
+
let cre = ds_add(vec2f(_dp_cx_hi, _dp_cx_lo), ds_from(dx));
|
|
62743
|
+
let cim = ds_add(vec2f(_dp_cy_hi, _dp_cy_lo), ds_from(dy));
|
|
62744
|
+
return vec4f(cre.x, cim.x, cre.y, cim.y);
|
|
62745
|
+
}
|
|
62746
|
+
|
|
62747
|
+
fn _fractal_mandelbrot_dp(c: vec4f, maxIter: i32) -> f32 {
|
|
62748
|
+
let cr = vec2f(c.x, c.z);
|
|
62749
|
+
let ci = vec2f(c.y, c.w);
|
|
62750
|
+
var zr = vec2f(0.0, 0.0);
|
|
62751
|
+
var zi = vec2f(0.0, 0.0);
|
|
62752
|
+
for (var i: i32 = 0; i < maxIter; i++) {
|
|
62753
|
+
let zr2 = ds_sqr(zr);
|
|
62754
|
+
let zi2 = ds_sqr(zi);
|
|
62755
|
+
let mag2 = ds_add(zr2, zi2);
|
|
62756
|
+
if (mag2.x > 4.0) {
|
|
62757
|
+
return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62758
|
+
}
|
|
62759
|
+
let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
62760
|
+
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
62761
|
+
zi = new_zi;
|
|
62762
|
+
}
|
|
62763
|
+
return 1.0;
|
|
62764
|
+
}
|
|
62765
|
+
|
|
62766
|
+
fn _fractal_julia_dp(z_in: vec4f, c: vec4f, maxIter: i32) -> f32 {
|
|
62767
|
+
var zr = vec2f(z_in.x, z_in.z);
|
|
62768
|
+
var zi = vec2f(z_in.y, z_in.w);
|
|
62769
|
+
let cr = vec2f(c.x, c.z);
|
|
62770
|
+
let ci = vec2f(c.y, c.w);
|
|
62771
|
+
for (var i: i32 = 0; i < maxIter; i++) {
|
|
62772
|
+
let zr2 = ds_sqr(zr);
|
|
62773
|
+
let zi2 = ds_sqr(zi);
|
|
62774
|
+
let mag2 = ds_add(zr2, zi2);
|
|
62775
|
+
if (mag2.x > 4.0) {
|
|
62776
|
+
return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62777
|
+
}
|
|
62778
|
+
let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
62779
|
+
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
62780
|
+
zi = new_zi;
|
|
62781
|
+
}
|
|
62782
|
+
return 1.0;
|
|
62783
|
+
}
|
|
62453
62784
|
`;
|
|
62454
62785
|
var GPU_FRACTAL_PREAMBLE_GLSL = `
|
|
62455
62786
|
float _fractal_mandelbrot(vec2 c, int maxIter) {
|
|
@@ -62493,6 +62824,208 @@ fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
|
|
|
62493
62824
|
}
|
|
62494
62825
|
return 1.0;
|
|
62495
62826
|
}
|
|
62827
|
+
`;
|
|
62828
|
+
var GPU_FRACTAL_PT_PREAMBLE_GLSL = `
|
|
62829
|
+
uniform sampler2D _refOrbit;
|
|
62830
|
+
uniform int _refOrbitLen;
|
|
62831
|
+
uniform int _refOrbitTexWidth;
|
|
62832
|
+
uniform float _pt_offset_x;
|
|
62833
|
+
uniform float _pt_offset_y;
|
|
62834
|
+
uniform float _pt_w;
|
|
62835
|
+
uniform float _pt_h;
|
|
62836
|
+
|
|
62837
|
+
vec2 _pt_delta() {
|
|
62838
|
+
float dx = _pt_offset_x + (v_uv.x - 0.5) * _pt_w;
|
|
62839
|
+
float dy = _pt_offset_y + (v_uv.y - 0.5) * _pt_h;
|
|
62840
|
+
return vec2(dx, dy);
|
|
62841
|
+
}
|
|
62842
|
+
|
|
62843
|
+
vec2 _pt_fetch_orbit(int i) {
|
|
62844
|
+
int y = i / _refOrbitTexWidth;
|
|
62845
|
+
int x = i - y * _refOrbitTexWidth;
|
|
62846
|
+
return texelFetch(_refOrbit, ivec2(x, y), 0).rg;
|
|
62847
|
+
}
|
|
62848
|
+
|
|
62849
|
+
float _fractal_mandelbrot_pt(vec2 delta_c, int maxIter) {
|
|
62850
|
+
float dr = 0.0;
|
|
62851
|
+
float di = 0.0;
|
|
62852
|
+
int orbitLen = min(maxIter, _refOrbitLen);
|
|
62853
|
+
for (int i = 0; i < orbitLen; i++) {
|
|
62854
|
+
vec2 Zn = _pt_fetch_orbit(i);
|
|
62855
|
+
// delta_{n+1} = 2*Z_n*delta_n + delta_n^2 + delta_c
|
|
62856
|
+
float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62857
|
+
float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62858
|
+
dr = new_dr;
|
|
62859
|
+
di = new_di;
|
|
62860
|
+
// Full z = Z_{n+1} + delta for escape check
|
|
62861
|
+
vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
|
|
62862
|
+
float zr = Zn1.x + dr;
|
|
62863
|
+
float zi = Zn1.y + di;
|
|
62864
|
+
float mag2 = zr * zr + zi * zi;
|
|
62865
|
+
if (mag2 > 4.0)
|
|
62866
|
+
return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62867
|
+
// Glitch detection: |delta|^2 > |Z|^2
|
|
62868
|
+
float dmag2 = dr * dr + di * di;
|
|
62869
|
+
float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62870
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62871
|
+
// Rebase to absolute coordinates and continue with single-float
|
|
62872
|
+
float abs_zr = Zn1.x + dr;
|
|
62873
|
+
float abs_zi = Zn1.y + di;
|
|
62874
|
+
// Reconstruct absolute c from reference + delta
|
|
62875
|
+
// (Use ds_from for the concept, but single-float suffices for fallback)
|
|
62876
|
+
float cx = abs_zr - dr + delta_c.x;
|
|
62877
|
+
float cy = abs_zi - di + delta_c.y;
|
|
62878
|
+
for (int j = i + 1; j < maxIter; j++) {
|
|
62879
|
+
float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
|
|
62880
|
+
abs_zi = 2.0 * abs_zr * abs_zi + cy;
|
|
62881
|
+
abs_zr = new_zr;
|
|
62882
|
+
mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
|
|
62883
|
+
if (mag2 > 4.0)
|
|
62884
|
+
return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62885
|
+
}
|
|
62886
|
+
return 1.0;
|
|
62887
|
+
}
|
|
62888
|
+
}
|
|
62889
|
+
return 1.0;
|
|
62890
|
+
}
|
|
62891
|
+
|
|
62892
|
+
float _fractal_julia_pt(vec2 z_delta, vec2 delta_c, int maxIter) {
|
|
62893
|
+
float dr = z_delta.x;
|
|
62894
|
+
float di = z_delta.y;
|
|
62895
|
+
int orbitLen = min(maxIter, _refOrbitLen);
|
|
62896
|
+
for (int i = 0; i < orbitLen; i++) {
|
|
62897
|
+
vec2 Zn = _pt_fetch_orbit(i);
|
|
62898
|
+
float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62899
|
+
float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62900
|
+
dr = new_dr;
|
|
62901
|
+
di = new_di;
|
|
62902
|
+
vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
|
|
62903
|
+
float zr = Zn1.x + dr;
|
|
62904
|
+
float zi = Zn1.y + di;
|
|
62905
|
+
float mag2 = zr * zr + zi * zi;
|
|
62906
|
+
if (mag2 > 4.0)
|
|
62907
|
+
return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62908
|
+
float dmag2 = dr * dr + di * di;
|
|
62909
|
+
float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62910
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62911
|
+
float abs_zr = Zn1.x + dr;
|
|
62912
|
+
float abs_zi = Zn1.y + di;
|
|
62913
|
+
float cx = delta_c.x;
|
|
62914
|
+
float cy = delta_c.y;
|
|
62915
|
+
for (int j = i + 1; j < maxIter; j++) {
|
|
62916
|
+
float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
|
|
62917
|
+
abs_zi = 2.0 * abs_zr * abs_zi + cy;
|
|
62918
|
+
abs_zr = new_zr;
|
|
62919
|
+
mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
|
|
62920
|
+
if (mag2 > 4.0)
|
|
62921
|
+
return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62922
|
+
}
|
|
62923
|
+
return 1.0;
|
|
62924
|
+
}
|
|
62925
|
+
}
|
|
62926
|
+
return 1.0;
|
|
62927
|
+
}
|
|
62928
|
+
`;
|
|
62929
|
+
var GPU_FRACTAL_PT_PREAMBLE_WGSL = `
|
|
62930
|
+
@group(0) @binding(1) var _refOrbit: texture_2d<f32>;
|
|
62931
|
+
var<uniform> _refOrbitLen: i32;
|
|
62932
|
+
var<uniform> _refOrbitTexWidth: i32;
|
|
62933
|
+
var<uniform> _pt_offset_x: f32;
|
|
62934
|
+
var<uniform> _pt_offset_y: f32;
|
|
62935
|
+
var<uniform> _pt_w: f32;
|
|
62936
|
+
var<uniform> _pt_h: f32;
|
|
62937
|
+
|
|
62938
|
+
fn _pt_delta(uv: vec2f) -> vec2f {
|
|
62939
|
+
let dx = _pt_offset_x + (uv.x - 0.5) * _pt_w;
|
|
62940
|
+
let dy = _pt_offset_y + (uv.y - 0.5) * _pt_h;
|
|
62941
|
+
return vec2f(dx, dy);
|
|
62942
|
+
}
|
|
62943
|
+
|
|
62944
|
+
fn _pt_fetch_orbit(i: i32) -> vec2f {
|
|
62945
|
+
let y = i / _refOrbitTexWidth;
|
|
62946
|
+
let x = i - y * _refOrbitTexWidth;
|
|
62947
|
+
return textureLoad(_refOrbit, vec2i(x, y), 0).rg;
|
|
62948
|
+
}
|
|
62949
|
+
|
|
62950
|
+
fn _fractal_mandelbrot_pt(delta_c: vec2f, maxIter: i32) -> f32 {
|
|
62951
|
+
var dr: f32 = 0.0;
|
|
62952
|
+
var di: f32 = 0.0;
|
|
62953
|
+
let orbitLen = min(maxIter, _refOrbitLen);
|
|
62954
|
+
for (var i: i32 = 0; i < orbitLen; i++) {
|
|
62955
|
+
let Zn = _pt_fetch_orbit(i);
|
|
62956
|
+
let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62957
|
+
let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62958
|
+
dr = new_dr;
|
|
62959
|
+
di = new_di;
|
|
62960
|
+
var Zn1 = vec2f(0.0);
|
|
62961
|
+
if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
|
|
62962
|
+
let zr = Zn1.x + dr;
|
|
62963
|
+
let zi = Zn1.y + di;
|
|
62964
|
+
var mag2 = zr * zr + zi * zi;
|
|
62965
|
+
if (mag2 > 4.0) {
|
|
62966
|
+
return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62967
|
+
}
|
|
62968
|
+
let dmag2 = dr * dr + di * di;
|
|
62969
|
+
let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62970
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62971
|
+
var f_zr = Zn1.x + dr;
|
|
62972
|
+
var f_zi = Zn1.y + di;
|
|
62973
|
+
let cx = delta_c.x;
|
|
62974
|
+
let cy = delta_c.y;
|
|
62975
|
+
for (var j: i32 = i + 1; j < maxIter; j++) {
|
|
62976
|
+
let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
|
|
62977
|
+
f_zi = 2.0 * f_zr * f_zi + cy;
|
|
62978
|
+
f_zr = t_zr;
|
|
62979
|
+
mag2 = f_zr * f_zr + f_zi * f_zi;
|
|
62980
|
+
if (mag2 > 4.0) {
|
|
62981
|
+
return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62982
|
+
}
|
|
62983
|
+
}
|
|
62984
|
+
return 1.0;
|
|
62985
|
+
}
|
|
62986
|
+
}
|
|
62987
|
+
return 1.0;
|
|
62988
|
+
}
|
|
62989
|
+
|
|
62990
|
+
fn _fractal_julia_pt(z_delta: vec2f, delta_c: vec2f, maxIter: i32) -> f32 {
|
|
62991
|
+
var dr = z_delta.x;
|
|
62992
|
+
var di = z_delta.y;
|
|
62993
|
+
let orbitLen = min(maxIter, _refOrbitLen);
|
|
62994
|
+
for (var i: i32 = 0; i < orbitLen; i++) {
|
|
62995
|
+
let Zn = _pt_fetch_orbit(i);
|
|
62996
|
+
let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62997
|
+
let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62998
|
+
dr = new_dr;
|
|
62999
|
+
di = new_di;
|
|
63000
|
+
var Zn1 = vec2f(0.0);
|
|
63001
|
+
if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
|
|
63002
|
+
let zr = Zn1.x + dr;
|
|
63003
|
+
let zi = Zn1.y + di;
|
|
63004
|
+
var mag2 = zr * zr + zi * zi;
|
|
63005
|
+
if (mag2 > 4.0) {
|
|
63006
|
+
return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
63007
|
+
}
|
|
63008
|
+
let dmag2 = dr * dr + di * di;
|
|
63009
|
+
let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
63010
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
63011
|
+
var f_zr = Zn1.x + dr;
|
|
63012
|
+
var f_zi = Zn1.y + di;
|
|
63013
|
+
let cx = delta_c.x;
|
|
63014
|
+
let cy = delta_c.y;
|
|
63015
|
+
for (var j: i32 = i + 1; j < maxIter; j++) {
|
|
63016
|
+
let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
|
|
63017
|
+
f_zi = 2.0 * f_zr * f_zi + cy;
|
|
63018
|
+
f_zr = t_zr;
|
|
63019
|
+
mag2 = f_zr * f_zr + f_zi * f_zi;
|
|
63020
|
+
if (mag2 > 4.0) {
|
|
63021
|
+
return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
63022
|
+
}
|
|
63023
|
+
}
|
|
63024
|
+
return 1.0;
|
|
63025
|
+
}
|
|
63026
|
+
}
|
|
63027
|
+
return 1.0;
|
|
63028
|
+
}
|
|
62496
63029
|
`;
|
|
62497
63030
|
var GPU_COLOR_PREAMBLE_GLSL = `
|
|
62498
63031
|
float _gpu_srgb_to_linear(float c) {
|
|
@@ -62932,6 +63465,7 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
|
|
|
62932
63465
|
const constants = this.getConstants();
|
|
62933
63466
|
const v2 = this.languageId === "wgsl" ? "vec2f" : "vec2";
|
|
62934
63467
|
const target = this.createTarget({
|
|
63468
|
+
hints: options.hints,
|
|
62935
63469
|
functions: (id) => {
|
|
62936
63470
|
if (userFunctions && id in userFunctions) {
|
|
62937
63471
|
const fn = userFunctions[id];
|
|
@@ -62970,12 +63504,89 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
|
|
|
62970
63504
|
if (code.includes("_gpu_besselJ"))
|
|
62971
63505
|
preamble += this.languageId === "wgsl" ? GPU_BESSELJ_PREAMBLE_WGSL : GPU_BESSELJ_PREAMBLE_GLSL;
|
|
62972
63506
|
if (code.includes("_fractal_")) {
|
|
62973
|
-
|
|
63507
|
+
if (code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) {
|
|
63508
|
+
preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
|
|
63509
|
+
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PT_PREAMBLE_WGSL : GPU_FRACTAL_PT_PREAMBLE_GLSL;
|
|
63510
|
+
} else if (code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) {
|
|
63511
|
+
preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
|
|
63512
|
+
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_DP_PREAMBLE_WGSL : GPU_FRACTAL_DP_PREAMBLE_GLSL;
|
|
63513
|
+
} else {
|
|
63514
|
+
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
|
|
63515
|
+
}
|
|
62974
63516
|
}
|
|
62975
63517
|
if (code.includes("_gpu_srgb_to") || code.includes("_gpu_oklab") || code.includes("_gpu_oklch") || code.includes("_gpu_color_mix") || code.includes("_gpu_apca")) {
|
|
62976
63518
|
preamble += this.languageId === "wgsl" ? GPU_COLOR_PREAMBLE_WGSL : GPU_COLOR_PREAMBLE_GLSL;
|
|
62977
63519
|
}
|
|
62978
63520
|
if (preamble) result.preamble = preamble;
|
|
63521
|
+
if (code.includes("_fractal_") && options.hints?.viewport) {
|
|
63522
|
+
const strategy = selectFractalStrategy(target);
|
|
63523
|
+
const radius = options.hints.viewport.radius;
|
|
63524
|
+
switch (strategy) {
|
|
63525
|
+
case "single":
|
|
63526
|
+
result.staleWhen = { radiusBelow: 1e-6 };
|
|
63527
|
+
break;
|
|
63528
|
+
case "double":
|
|
63529
|
+
result.staleWhen = { radiusBelow: 1e-14, radiusAbove: 1e-5 };
|
|
63530
|
+
break;
|
|
63531
|
+
case "perturbation":
|
|
63532
|
+
result.staleWhen = {
|
|
63533
|
+
radiusAbove: 1e-5,
|
|
63534
|
+
radiusBelow: radius * 0.01,
|
|
63535
|
+
centerDistance: radius * 2
|
|
63536
|
+
};
|
|
63537
|
+
break;
|
|
63538
|
+
}
|
|
63539
|
+
}
|
|
63540
|
+
if ((code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) && options.hints?.viewport) {
|
|
63541
|
+
const cx = hpToNumber(options.hints.viewport.center[0]);
|
|
63542
|
+
const cy = hpToNumber(options.hints.viewport.center[1]);
|
|
63543
|
+
const size = options.hints.viewport.radius * 2;
|
|
63544
|
+
const cx_hi = Math.fround(cx);
|
|
63545
|
+
const cy_hi = Math.fround(cy);
|
|
63546
|
+
result.uniforms = {
|
|
63547
|
+
...result.uniforms,
|
|
63548
|
+
_dp_cx_hi: cx_hi,
|
|
63549
|
+
_dp_cx_lo: cx - cx_hi,
|
|
63550
|
+
_dp_cy_hi: cy_hi,
|
|
63551
|
+
_dp_cy_lo: cy - cy_hi,
|
|
63552
|
+
_dp_w: size,
|
|
63553
|
+
_dp_h: size
|
|
63554
|
+
};
|
|
63555
|
+
}
|
|
63556
|
+
if ((code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) && options.hints?.viewport) {
|
|
63557
|
+
const viewport = options.hints.viewport;
|
|
63558
|
+
const size = viewport.radius * 2;
|
|
63559
|
+
result.uniforms = {
|
|
63560
|
+
...result.uniforms,
|
|
63561
|
+
_pt_offset_x: 0,
|
|
63562
|
+
_pt_offset_y: 0,
|
|
63563
|
+
_pt_w: size,
|
|
63564
|
+
_pt_h: size
|
|
63565
|
+
};
|
|
63566
|
+
const digits = Math.max(50, Math.ceil(-Math.log10(viewport.radius)) + 10);
|
|
63567
|
+
const maxIter = 1e3;
|
|
63568
|
+
const orbit = computeReferenceOrbit(
|
|
63569
|
+
viewport.center,
|
|
63570
|
+
maxIter,
|
|
63571
|
+
digits
|
|
63572
|
+
);
|
|
63573
|
+
const orbitLen = orbit.length / 2;
|
|
63574
|
+
const texWidth = Math.min(orbitLen, 4096);
|
|
63575
|
+
const texHeight = Math.ceil(orbitLen / texWidth);
|
|
63576
|
+
result.textures = {
|
|
63577
|
+
_refOrbit: {
|
|
63578
|
+
data: orbit,
|
|
63579
|
+
width: texWidth,
|
|
63580
|
+
height: texHeight,
|
|
63581
|
+
format: "rg32f"
|
|
63582
|
+
}
|
|
63583
|
+
};
|
|
63584
|
+
result.uniforms = {
|
|
63585
|
+
...result.uniforms,
|
|
63586
|
+
_refOrbitLen: orbitLen,
|
|
63587
|
+
_refOrbitTexWidth: texWidth
|
|
63588
|
+
};
|
|
63589
|
+
}
|
|
62979
63590
|
return result;
|
|
62980
63591
|
}
|
|
62981
63592
|
compileToSource(expr2, _options = {}) {
|
|
@@ -67958,7 +68569,7 @@ ${workgroupAttr}fn main(${paramStr})${returnStr} {
|
|
|
67958
68569
|
_setDefaultEngineFactory(() => new ComputeEngine());
|
|
67959
68570
|
|
|
67960
68571
|
// src/core.ts
|
|
67961
|
-
var version = "0.55.
|
|
68572
|
+
var version = "0.55.5";
|
|
67962
68573
|
return __toCommonJS(core_exports);
|
|
67963
68574
|
})();
|
|
67964
68575
|
/*! Bundled license information:
|