@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.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Compute Engine 0.55.
|
|
1
|
+
/** Compute Engine 0.55.5 */
|
|
2
2
|
|
|
3
3
|
// node_modules/complex-esm/dist/src/complex.js
|
|
4
4
|
var cosh = Math.cosh || function(x) {
|
|
@@ -17152,6 +17152,10 @@ function parseSymbolBody(parser) {
|
|
|
17152
17152
|
parser.nextToken();
|
|
17153
17153
|
continue;
|
|
17154
17154
|
}
|
|
17155
|
+
if (EMOJIS.test(id + token)) {
|
|
17156
|
+
id += parser.nextToken();
|
|
17157
|
+
continue;
|
|
17158
|
+
}
|
|
17155
17159
|
const next = parseSymbolToken(parser, { toplevel: false });
|
|
17156
17160
|
if (next === null) return null;
|
|
17157
17161
|
id += next;
|
|
@@ -17191,6 +17195,7 @@ function parseSymbolBody(parser) {
|
|
|
17191
17195
|
function matchPrefixedSymbol(parser) {
|
|
17192
17196
|
const prefix = SYMBOL_PREFIX[parser.peek] ?? null;
|
|
17193
17197
|
if (prefix === null) return null;
|
|
17198
|
+
const start = parser.index;
|
|
17194
17199
|
parser.nextToken();
|
|
17195
17200
|
if (parser.match("<{>")) {
|
|
17196
17201
|
let body = "";
|
|
@@ -17211,17 +17216,48 @@ function matchPrefixedSymbol(parser) {
|
|
|
17211
17216
|
parser.nextToken();
|
|
17212
17217
|
}
|
|
17213
17218
|
body += parseSymbolBody(parser);
|
|
17214
|
-
if (body === null || !parser.match("<}>"))
|
|
17219
|
+
if (body === null || !parser.match("<}>")) {
|
|
17220
|
+
parser.index = start;
|
|
17221
|
+
return null;
|
|
17222
|
+
}
|
|
17215
17223
|
if (prefix === "_upright" && body.length > 1) return body;
|
|
17216
17224
|
return body + prefix;
|
|
17217
17225
|
}
|
|
17226
|
+
parser.index = start;
|
|
17218
17227
|
return null;
|
|
17219
17228
|
}
|
|
17220
17229
|
function parseInvalidSymbol(parser) {
|
|
17221
17230
|
const start = parser.index;
|
|
17222
17231
|
const id = matchPrefixedSymbol(parser);
|
|
17223
|
-
if (id
|
|
17224
|
-
|
|
17232
|
+
if (id !== null) {
|
|
17233
|
+
if (isValidSymbol(id)) return null;
|
|
17234
|
+
return parser.error(["invalid-symbol", { str: validateSymbol(id) }], start);
|
|
17235
|
+
}
|
|
17236
|
+
parser.index = start;
|
|
17237
|
+
const prefix = SYMBOL_PREFIX[parser.peek] ?? null;
|
|
17238
|
+
if (prefix === null) return null;
|
|
17239
|
+
parser.nextToken();
|
|
17240
|
+
if (!parser.match("<{>")) {
|
|
17241
|
+
parser.index = start;
|
|
17242
|
+
return null;
|
|
17243
|
+
}
|
|
17244
|
+
const bodyStart = parser.index;
|
|
17245
|
+
let level = 0;
|
|
17246
|
+
while (!parser.atEnd && !(level === 0 && parser.peek === "<}>")) {
|
|
17247
|
+
if (parser.peek === "<{>") level += 1;
|
|
17248
|
+
if (parser.peek === "<}>") level -= 1;
|
|
17249
|
+
parser.nextToken();
|
|
17250
|
+
}
|
|
17251
|
+
const bodyText = parser.latex(bodyStart, parser.index);
|
|
17252
|
+
if (isValidSymbol(bodyText)) {
|
|
17253
|
+
parser.index = start;
|
|
17254
|
+
return null;
|
|
17255
|
+
}
|
|
17256
|
+
parser.match("<}>");
|
|
17257
|
+
return parser.error(
|
|
17258
|
+
["invalid-symbol", { str: validateSymbol(bodyText) }],
|
|
17259
|
+
start
|
|
17260
|
+
);
|
|
17225
17261
|
}
|
|
17226
17262
|
function parseSymbol(parser) {
|
|
17227
17263
|
if (/^[a-zA-Z]$/.test(parser.peek) || /^\p{XIDS}$/u.test(parser.peek)) {
|
|
@@ -18176,18 +18212,12 @@ var _Parser = class __Parser {
|
|
|
18176
18212
|
this.index = start;
|
|
18177
18213
|
return false;
|
|
18178
18214
|
}
|
|
18179
|
-
|
|
18180
|
-
const useLatexCommand = matchedToken.startsWith("\\");
|
|
18215
|
+
this.nextToken();
|
|
18181
18216
|
if (hasBracedDelimiter && !this.match("<}>")) {
|
|
18182
18217
|
this.index = start;
|
|
18183
18218
|
return false;
|
|
18184
18219
|
}
|
|
18185
|
-
const
|
|
18186
|
-
close[0]
|
|
18187
|
-
];
|
|
18188
|
-
const closeToken = closeTokens.find(
|
|
18189
|
-
(t) => useLatexCommand ? t.startsWith("\\") : !t.startsWith("\\")
|
|
18190
|
-
) ?? closeTokens[0];
|
|
18220
|
+
const closeToken = close[0];
|
|
18191
18221
|
const closeBoundary3 = closePrefix ? hasBracedDelimiter ? [closePrefix, "<{>", closeToken, "<}>"] : [closePrefix, closeToken] : [closeToken];
|
|
18192
18222
|
this.addBoundary(closeBoundary3);
|
|
18193
18223
|
return true;
|
|
@@ -39582,30 +39612,6 @@ var COOLWARM = [
|
|
|
39582
39612
|
"#ae2036",
|
|
39583
39613
|
"#b40426"
|
|
39584
39614
|
];
|
|
39585
|
-
var OCEAN_BALANCE = [
|
|
39586
|
-
"#00441b",
|
|
39587
|
-
"#006d5b",
|
|
39588
|
-
"#1a8c7d",
|
|
39589
|
-
"#2fa394",
|
|
39590
|
-
"#4fb3a3",
|
|
39591
|
-
"#6fc1b3",
|
|
39592
|
-
"#8dcfc3",
|
|
39593
|
-
"#a6dbd1",
|
|
39594
|
-
"#bfe6de",
|
|
39595
|
-
"#d7f0ea",
|
|
39596
|
-
"#f7f7f7",
|
|
39597
|
-
"#eeeeee",
|
|
39598
|
-
"#ddd8e6",
|
|
39599
|
-
"#c7bcda",
|
|
39600
|
-
"#b3a0d0",
|
|
39601
|
-
"#9f86c7",
|
|
39602
|
-
"#8d6dbd",
|
|
39603
|
-
"#7b56b1",
|
|
39604
|
-
"#6a42a3",
|
|
39605
|
-
"#5a3093",
|
|
39606
|
-
"#4a1f82",
|
|
39607
|
-
"#3b0f70"
|
|
39608
|
-
];
|
|
39609
39615
|
var reversePalette = (palette) => palette.slice().reverse();
|
|
39610
39616
|
var DIVERGING_PALETTES = {
|
|
39611
39617
|
roma: ROMA,
|
|
@@ -39617,9 +39623,7 @@ var DIVERGING_PALETTES = {
|
|
|
39617
39623
|
rdbu: RDBU,
|
|
39618
39624
|
"rdbu-reversed": reversePalette(RDBU),
|
|
39619
39625
|
coolwarm: COOLWARM,
|
|
39620
|
-
"coolwarm-reversed": reversePalette(COOLWARM)
|
|
39621
|
-
"ocean-balance": OCEAN_BALANCE,
|
|
39622
|
-
"ocean-balance-reversed": reversePalette(OCEAN_BALANCE)
|
|
39626
|
+
"coolwarm-reversed": reversePalette(COOLWARM)
|
|
39623
39627
|
};
|
|
39624
39628
|
var TURBO = [
|
|
39625
39629
|
"#30123b",
|
|
@@ -41703,6 +41707,40 @@ var GREY = [
|
|
|
41703
41707
|
"#eeeeee",
|
|
41704
41708
|
"#ffffff"
|
|
41705
41709
|
];
|
|
41710
|
+
var CMOCEAN_PHASE = [
|
|
41711
|
+
"#a8780d",
|
|
41712
|
+
"#b3701b",
|
|
41713
|
+
"#be6828",
|
|
41714
|
+
"#c75f35",
|
|
41715
|
+
"#cf5643",
|
|
41716
|
+
"#d54b53",
|
|
41717
|
+
"#db4066",
|
|
41718
|
+
"#de357b",
|
|
41719
|
+
"#df2a93",
|
|
41720
|
+
"#dc25ad",
|
|
41721
|
+
"#d529c4",
|
|
41722
|
+
"#cc34d7",
|
|
41723
|
+
"#c041e5",
|
|
41724
|
+
"#b24fef",
|
|
41725
|
+
"#a25cf3",
|
|
41726
|
+
"#9168f4",
|
|
41727
|
+
"#7d73f0",
|
|
41728
|
+
"#687ce8",
|
|
41729
|
+
"#5285dc",
|
|
41730
|
+
"#3d8bcd",
|
|
41731
|
+
"#2c90bc",
|
|
41732
|
+
"#2093ac",
|
|
41733
|
+
"#19959c",
|
|
41734
|
+
"#12978c",
|
|
41735
|
+
"#0c987c",
|
|
41736
|
+
"#119a69",
|
|
41737
|
+
"#249a52",
|
|
41738
|
+
"#409839",
|
|
41739
|
+
"#5e9420",
|
|
41740
|
+
"#778d12",
|
|
41741
|
+
"#8b860d",
|
|
41742
|
+
"#9b7f0d"
|
|
41743
|
+
];
|
|
41706
41744
|
var reversePalette2 = (palette) => palette.slice().reverse();
|
|
41707
41745
|
var SEQUENTIAL_PALETTES = {
|
|
41708
41746
|
turbo: TURBO,
|
|
@@ -41726,7 +41764,9 @@ var SEQUENTIAL_PALETTES = {
|
|
|
41726
41764
|
"rocket-reversed": reversePalette2(ROCKET),
|
|
41727
41765
|
mako: MAKO,
|
|
41728
41766
|
// blue to teal
|
|
41729
|
-
"mako-reversed": reversePalette2(MAKO)
|
|
41767
|
+
"mako-reversed": reversePalette2(MAKO),
|
|
41768
|
+
"cmocean-phase": CMOCEAN_PHASE,
|
|
41769
|
+
"cmocean-phase-reversed": reversePalette2(CMOCEAN_PHASE)
|
|
41730
41770
|
};
|
|
41731
41771
|
|
|
41732
41772
|
// src/compute-engine/library/colors.ts
|
|
@@ -54723,7 +54763,8 @@ function compile(expr2, options) {
|
|
|
54723
54763
|
vars: options?.vars,
|
|
54724
54764
|
imports: options?.imports,
|
|
54725
54765
|
preamble: options?.preamble,
|
|
54726
|
-
realOnly: options?.realOnly
|
|
54766
|
+
realOnly: options?.realOnly,
|
|
54767
|
+
hints: options?.hints
|
|
54727
54768
|
});
|
|
54728
54769
|
} catch (e) {
|
|
54729
54770
|
if (options?.fallback ?? true) {
|
|
@@ -61223,6 +61264,43 @@ function fibonacci(n) {
|
|
|
61223
61264
|
return b;
|
|
61224
61265
|
}
|
|
61225
61266
|
|
|
61267
|
+
// src/compute-engine/compilation/fractal-orbit.ts
|
|
61268
|
+
function toBigDecimal(v) {
|
|
61269
|
+
if (typeof v === "object" && "hi" in v)
|
|
61270
|
+
return new BigDecimal(v.hi).add(new BigDecimal(v.lo));
|
|
61271
|
+
return new BigDecimal(v);
|
|
61272
|
+
}
|
|
61273
|
+
function hpToNumber(v) {
|
|
61274
|
+
if (typeof v === "number") return v;
|
|
61275
|
+
if (typeof v === "string") return Number(v);
|
|
61276
|
+
return v.hi + v.lo;
|
|
61277
|
+
}
|
|
61278
|
+
function computeReferenceOrbit(center, maxIter, precision) {
|
|
61279
|
+
const prevPrecision = BigDecimal.precision;
|
|
61280
|
+
BigDecimal.precision = precision;
|
|
61281
|
+
try {
|
|
61282
|
+
const cr = toBigDecimal(center[0]);
|
|
61283
|
+
const ci = toBigDecimal(center[1]);
|
|
61284
|
+
let zr = BigDecimal.ZERO;
|
|
61285
|
+
let zi = BigDecimal.ZERO;
|
|
61286
|
+
const ESCAPE = new BigDecimal(256);
|
|
61287
|
+
const points = [];
|
|
61288
|
+
for (let i = 0; i < maxIter; i++) {
|
|
61289
|
+
points.push(zr.toNumber(), zi.toNumber());
|
|
61290
|
+
const zr2 = zr.mul(zr).toPrecision(precision);
|
|
61291
|
+
const zi2 = zi.mul(zi).toPrecision(precision);
|
|
61292
|
+
const mag2 = zr2.add(zi2);
|
|
61293
|
+
if (mag2.cmp(ESCAPE) > 0) break;
|
|
61294
|
+
const new_zi = zr.mul(zi).toPrecision(precision).mul(2).add(ci);
|
|
61295
|
+
zr = zr2.sub(zi2).add(cr);
|
|
61296
|
+
zi = new_zi;
|
|
61297
|
+
}
|
|
61298
|
+
return new Float32Array(points);
|
|
61299
|
+
} finally {
|
|
61300
|
+
BigDecimal.precision = prevPrecision;
|
|
61301
|
+
}
|
|
61302
|
+
}
|
|
61303
|
+
|
|
61226
61304
|
// src/compute-engine/compilation/gpu-target.ts
|
|
61227
61305
|
var GPU_OPERATORS = {
|
|
61228
61306
|
Add: ["+", 11],
|
|
@@ -61306,6 +61384,13 @@ function compileGPUSumProduct(kind, args, _compile2, target) {
|
|
|
61306
61384
|
];
|
|
61307
61385
|
return lines.join("\n");
|
|
61308
61386
|
}
|
|
61387
|
+
function selectFractalStrategy(target) {
|
|
61388
|
+
const radius = target.hints?.viewport?.radius;
|
|
61389
|
+
if (radius === void 0) return "single";
|
|
61390
|
+
if (radius > 1e-6) return "single";
|
|
61391
|
+
if (radius > 1e-14) return "double";
|
|
61392
|
+
return "perturbation";
|
|
61393
|
+
}
|
|
61309
61394
|
var GPU_FUNCTIONS = {
|
|
61310
61395
|
// Variadic arithmetic (for function-call form, e.g., with vectors)
|
|
61311
61396
|
Add: (args, compile3, target) => {
|
|
@@ -61801,12 +61886,32 @@ var GPU_FUNCTIONS = {
|
|
|
61801
61886
|
if (c === null || maxIter === null)
|
|
61802
61887
|
throw new Error("Mandelbrot: missing arguments");
|
|
61803
61888
|
const iterCode = compileIntArg(maxIter, compile3, target);
|
|
61889
|
+
const strategy = selectFractalStrategy(target);
|
|
61890
|
+
if (strategy === "double") {
|
|
61891
|
+
const dpCoord = target?.language === "wgsl" ? "_dp_coord(v_uv)" : "_dp_coord()";
|
|
61892
|
+
return `_fractal_mandelbrot_dp(${dpCoord}, ${iterCode})`;
|
|
61893
|
+
}
|
|
61894
|
+
if (strategy === "perturbation") {
|
|
61895
|
+
const ptDelta = target?.language === "wgsl" ? "_pt_delta(v_uv)" : "_pt_delta()";
|
|
61896
|
+
return `_fractal_mandelbrot_pt(${ptDelta}, ${iterCode})`;
|
|
61897
|
+
}
|
|
61804
61898
|
return `_fractal_mandelbrot(${compile3(c)}, ${iterCode})`;
|
|
61805
61899
|
},
|
|
61806
61900
|
Julia: ([z, c, maxIter], compile3, target) => {
|
|
61807
61901
|
if (z === null || c === null || maxIter === null)
|
|
61808
61902
|
throw new Error("Julia: missing arguments");
|
|
61809
61903
|
const iterCode = compileIntArg(maxIter, compile3, target);
|
|
61904
|
+
const strategy = selectFractalStrategy(target);
|
|
61905
|
+
if (strategy === "double") {
|
|
61906
|
+
const dpCoord = target?.language === "wgsl" ? "_dp_coord(v_uv)" : "_dp_coord()";
|
|
61907
|
+
const cCode = compile3(c);
|
|
61908
|
+
return `_fractal_julia_dp(${dpCoord}, vec4(${cCode}, vec2(0.0)), ${iterCode})`;
|
|
61909
|
+
}
|
|
61910
|
+
if (strategy === "perturbation") {
|
|
61911
|
+
const ptDelta = target?.language === "wgsl" ? "_pt_delta(v_uv)" : "_pt_delta()";
|
|
61912
|
+
const cCode = compile3(c);
|
|
61913
|
+
return `_fractal_julia_pt(${ptDelta}, ${cCode}, ${iterCode})`;
|
|
61914
|
+
}
|
|
61810
61915
|
return `_fractal_julia(${compile3(z)}, ${compile3(c)}, ${iterCode})`;
|
|
61811
61916
|
},
|
|
61812
61917
|
// Vector/Matrix operations
|
|
@@ -62404,6 +62509,232 @@ fn _gpu_besselJ(n_in: i32, x_in: f32) -> f32 {
|
|
|
62404
62509
|
return sgn * vals[n] / norm;
|
|
62405
62510
|
}
|
|
62406
62511
|
`;
|
|
62512
|
+
var GPU_DS_ARITHMETIC_PREAMBLE_GLSL = `
|
|
62513
|
+
// Split a float into high and low parts for exact multiplication
|
|
62514
|
+
vec2 ds_split(float a) {
|
|
62515
|
+
const float SPLIT = 4097.0; // 2^12 + 1
|
|
62516
|
+
float t = SPLIT * a;
|
|
62517
|
+
float hi = t - (t - a);
|
|
62518
|
+
float lo = a - hi;
|
|
62519
|
+
return vec2(hi, lo);
|
|
62520
|
+
}
|
|
62521
|
+
|
|
62522
|
+
// Create a double-single from a single float
|
|
62523
|
+
vec2 ds_from(float a) {
|
|
62524
|
+
return vec2(a, 0.0);
|
|
62525
|
+
}
|
|
62526
|
+
|
|
62527
|
+
// Error-free addition (Knuth TwoSum)
|
|
62528
|
+
vec2 ds_add(vec2 a, vec2 b) {
|
|
62529
|
+
float s = a.x + b.x;
|
|
62530
|
+
float v = s - a.x;
|
|
62531
|
+
float e = (a.x - (s - v)) + (b.x - v);
|
|
62532
|
+
float lo = (a.y + b.y) + e;
|
|
62533
|
+
float hi = s + lo;
|
|
62534
|
+
lo = lo - (hi - s);
|
|
62535
|
+
return vec2(hi, lo);
|
|
62536
|
+
}
|
|
62537
|
+
|
|
62538
|
+
// Double-single subtraction
|
|
62539
|
+
vec2 ds_sub(vec2 a, vec2 b) {
|
|
62540
|
+
return ds_add(a, vec2(-b.x, -b.y));
|
|
62541
|
+
}
|
|
62542
|
+
|
|
62543
|
+
// Error-free multiplication (Dekker TwoProduct)
|
|
62544
|
+
vec2 ds_mul(vec2 a, vec2 b) {
|
|
62545
|
+
float p = a.x * b.x;
|
|
62546
|
+
vec2 sa = ds_split(a.x);
|
|
62547
|
+
vec2 sb = ds_split(b.x);
|
|
62548
|
+
float err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
|
|
62549
|
+
err += a.x * b.y + a.y * b.x;
|
|
62550
|
+
float hi = p + err;
|
|
62551
|
+
float lo = err - (hi - p);
|
|
62552
|
+
return vec2(hi, lo);
|
|
62553
|
+
}
|
|
62554
|
+
|
|
62555
|
+
// Optimized self-multiply
|
|
62556
|
+
vec2 ds_sqr(vec2 a) {
|
|
62557
|
+
float p = a.x * a.x;
|
|
62558
|
+
vec2 sa = ds_split(a.x);
|
|
62559
|
+
float err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
|
|
62560
|
+
err += 2.0 * a.x * a.y;
|
|
62561
|
+
float hi = p + err;
|
|
62562
|
+
float lo = err - (hi - p);
|
|
62563
|
+
return vec2(hi, lo);
|
|
62564
|
+
}
|
|
62565
|
+
|
|
62566
|
+
// Compare magnitude: returns -1, 0, or 1
|
|
62567
|
+
float ds_cmp(vec2 a, vec2 b) {
|
|
62568
|
+
float d = a.x - b.x;
|
|
62569
|
+
if (d != 0.0) return sign(d);
|
|
62570
|
+
return sign(a.y - b.y);
|
|
62571
|
+
}
|
|
62572
|
+
`;
|
|
62573
|
+
var GPU_DS_ARITHMETIC_PREAMBLE_WGSL = `
|
|
62574
|
+
fn ds_split(a: f32) -> vec2f {
|
|
62575
|
+
const SPLIT: f32 = 4097.0;
|
|
62576
|
+
let t = SPLIT * a;
|
|
62577
|
+
let hi = t - (t - a);
|
|
62578
|
+
let lo = a - hi;
|
|
62579
|
+
return vec2f(hi, lo);
|
|
62580
|
+
}
|
|
62581
|
+
|
|
62582
|
+
fn ds_from(a: f32) -> vec2f {
|
|
62583
|
+
return vec2f(a, 0.0);
|
|
62584
|
+
}
|
|
62585
|
+
|
|
62586
|
+
fn ds_add(a: vec2f, b: vec2f) -> vec2f {
|
|
62587
|
+
let s = a.x + b.x;
|
|
62588
|
+
let v = s - a.x;
|
|
62589
|
+
let e = (a.x - (s - v)) + (b.x - v);
|
|
62590
|
+
let lo_t = (a.y + b.y) + e;
|
|
62591
|
+
let hi = s + lo_t;
|
|
62592
|
+
let lo = lo_t - (hi - s);
|
|
62593
|
+
return vec2f(hi, lo);
|
|
62594
|
+
}
|
|
62595
|
+
|
|
62596
|
+
fn ds_sub(a: vec2f, b: vec2f) -> vec2f {
|
|
62597
|
+
return ds_add(a, vec2f(-b.x, -b.y));
|
|
62598
|
+
}
|
|
62599
|
+
|
|
62600
|
+
fn ds_mul(a: vec2f, b: vec2f) -> vec2f {
|
|
62601
|
+
let p = a.x * b.x;
|
|
62602
|
+
let sa = ds_split(a.x);
|
|
62603
|
+
let sb = ds_split(b.x);
|
|
62604
|
+
var err = ((sa.x * sb.x - p) + sa.x * sb.y + sa.y * sb.x) + sa.y * sb.y;
|
|
62605
|
+
err += a.x * b.y + a.y * b.x;
|
|
62606
|
+
let hi = p + err;
|
|
62607
|
+
let lo = err - (hi - p);
|
|
62608
|
+
return vec2f(hi, lo);
|
|
62609
|
+
}
|
|
62610
|
+
|
|
62611
|
+
fn ds_sqr(a: vec2f) -> vec2f {
|
|
62612
|
+
let p = a.x * a.x;
|
|
62613
|
+
let sa = ds_split(a.x);
|
|
62614
|
+
var err = ((sa.x * sa.x - p) + 2.0 * sa.x * sa.y) + sa.y * sa.y;
|
|
62615
|
+
err += 2.0 * a.x * a.y;
|
|
62616
|
+
let hi = p + err;
|
|
62617
|
+
let lo = err - (hi - p);
|
|
62618
|
+
return vec2f(hi, lo);
|
|
62619
|
+
}
|
|
62620
|
+
|
|
62621
|
+
fn ds_cmp(a: vec2f, b: vec2f) -> f32 {
|
|
62622
|
+
let d = a.x - b.x;
|
|
62623
|
+
if (d != 0.0) { return sign(d); }
|
|
62624
|
+
return sign(a.y - b.y);
|
|
62625
|
+
}
|
|
62626
|
+
`;
|
|
62627
|
+
var GPU_FRACTAL_DP_PREAMBLE_GLSL = `
|
|
62628
|
+
uniform float _dp_cx_hi;
|
|
62629
|
+
uniform float _dp_cx_lo;
|
|
62630
|
+
uniform float _dp_cy_hi;
|
|
62631
|
+
uniform float _dp_cy_lo;
|
|
62632
|
+
uniform float _dp_w;
|
|
62633
|
+
uniform float _dp_h;
|
|
62634
|
+
|
|
62635
|
+
vec4 _dp_coord() {
|
|
62636
|
+
// Per-pixel offset from center \u2014 small, so float-precise
|
|
62637
|
+
float dx = (v_uv.x - 0.5) * _dp_w;
|
|
62638
|
+
float dy = (v_uv.y - 0.5) * _dp_h;
|
|
62639
|
+
// Combine center (hi+lo) + delta with emulated double precision
|
|
62640
|
+
vec2 cre = ds_add(vec2(_dp_cx_hi, _dp_cx_lo), ds_from(dx));
|
|
62641
|
+
vec2 cim = ds_add(vec2(_dp_cy_hi, _dp_cy_lo), ds_from(dy));
|
|
62642
|
+
return vec4(cre.x, cim.x, cre.y, cim.y);
|
|
62643
|
+
}
|
|
62644
|
+
|
|
62645
|
+
float _fractal_mandelbrot_dp(vec4 c, int maxIter) {
|
|
62646
|
+
// c = (re_hi, im_hi, re_lo, im_lo)
|
|
62647
|
+
vec2 cr = vec2(c.x, c.z); // real part as ds
|
|
62648
|
+
vec2 ci = vec2(c.y, c.w); // imag part as ds
|
|
62649
|
+
vec2 zr = vec2(0.0, 0.0);
|
|
62650
|
+
vec2 zi = vec2(0.0, 0.0);
|
|
62651
|
+
for (int i = 0; i < maxIter; i++) {
|
|
62652
|
+
vec2 zr2 = ds_sqr(zr);
|
|
62653
|
+
vec2 zi2 = ds_sqr(zi);
|
|
62654
|
+
// |z|^2 > 4.0 ?
|
|
62655
|
+
vec2 mag2 = ds_add(zr2, zi2);
|
|
62656
|
+
if (mag2.x > 4.0)
|
|
62657
|
+
return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62658
|
+
// z = z^2 + c
|
|
62659
|
+
vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci); // 2*zr*zi + ci
|
|
62660
|
+
zr = ds_add(ds_sub(zr2, zi2), cr); // zr^2 - zi^2 + cr
|
|
62661
|
+
zi = new_zi;
|
|
62662
|
+
}
|
|
62663
|
+
return 1.0;
|
|
62664
|
+
}
|
|
62665
|
+
|
|
62666
|
+
float _fractal_julia_dp(vec4 z_in, vec4 c, int maxIter) {
|
|
62667
|
+
vec2 zr = vec2(z_in.x, z_in.z);
|
|
62668
|
+
vec2 zi = vec2(z_in.y, z_in.w);
|
|
62669
|
+
vec2 cr = vec2(c.x, c.z);
|
|
62670
|
+
vec2 ci = vec2(c.y, c.w);
|
|
62671
|
+
for (int i = 0; i < maxIter; i++) {
|
|
62672
|
+
vec2 zr2 = ds_sqr(zr);
|
|
62673
|
+
vec2 zi2 = ds_sqr(zi);
|
|
62674
|
+
vec2 mag2 = ds_add(zr2, zi2);
|
|
62675
|
+
if (mag2.x > 4.0)
|
|
62676
|
+
return clamp((float(i) - log2(log2(mag2.x)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62677
|
+
vec2 new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
62678
|
+
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
62679
|
+
zi = new_zi;
|
|
62680
|
+
}
|
|
62681
|
+
return 1.0;
|
|
62682
|
+
}
|
|
62683
|
+
`;
|
|
62684
|
+
var GPU_FRACTAL_DP_PREAMBLE_WGSL = `
|
|
62685
|
+
@group(0) @binding(10) var<uniform> _dp_cx_hi: f32;
|
|
62686
|
+
@group(0) @binding(11) var<uniform> _dp_cx_lo: f32;
|
|
62687
|
+
@group(0) @binding(12) var<uniform> _dp_cy_hi: f32;
|
|
62688
|
+
@group(0) @binding(13) var<uniform> _dp_cy_lo: f32;
|
|
62689
|
+
@group(0) @binding(14) var<uniform> _dp_w: f32;
|
|
62690
|
+
@group(0) @binding(15) var<uniform> _dp_h: f32;
|
|
62691
|
+
|
|
62692
|
+
fn _dp_coord(uv: vec2f) -> vec4f {
|
|
62693
|
+
let dx = (uv.x - 0.5) * _dp_w;
|
|
62694
|
+
let dy = (uv.y - 0.5) * _dp_h;
|
|
62695
|
+
let cre = ds_add(vec2f(_dp_cx_hi, _dp_cx_lo), ds_from(dx));
|
|
62696
|
+
let cim = ds_add(vec2f(_dp_cy_hi, _dp_cy_lo), ds_from(dy));
|
|
62697
|
+
return vec4f(cre.x, cim.x, cre.y, cim.y);
|
|
62698
|
+
}
|
|
62699
|
+
|
|
62700
|
+
fn _fractal_mandelbrot_dp(c: vec4f, maxIter: i32) -> f32 {
|
|
62701
|
+
let cr = vec2f(c.x, c.z);
|
|
62702
|
+
let ci = vec2f(c.y, c.w);
|
|
62703
|
+
var zr = vec2f(0.0, 0.0);
|
|
62704
|
+
var zi = vec2f(0.0, 0.0);
|
|
62705
|
+
for (var i: i32 = 0; i < maxIter; i++) {
|
|
62706
|
+
let zr2 = ds_sqr(zr);
|
|
62707
|
+
let zi2 = ds_sqr(zi);
|
|
62708
|
+
let mag2 = ds_add(zr2, zi2);
|
|
62709
|
+
if (mag2.x > 4.0) {
|
|
62710
|
+
return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62711
|
+
}
|
|
62712
|
+
let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
62713
|
+
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
62714
|
+
zi = new_zi;
|
|
62715
|
+
}
|
|
62716
|
+
return 1.0;
|
|
62717
|
+
}
|
|
62718
|
+
|
|
62719
|
+
fn _fractal_julia_dp(z_in: vec4f, c: vec4f, maxIter: i32) -> f32 {
|
|
62720
|
+
var zr = vec2f(z_in.x, z_in.z);
|
|
62721
|
+
var zi = vec2f(z_in.y, z_in.w);
|
|
62722
|
+
let cr = vec2f(c.x, c.z);
|
|
62723
|
+
let ci = vec2f(c.y, c.w);
|
|
62724
|
+
for (var i: i32 = 0; i < maxIter; i++) {
|
|
62725
|
+
let zr2 = ds_sqr(zr);
|
|
62726
|
+
let zi2 = ds_sqr(zi);
|
|
62727
|
+
let mag2 = ds_add(zr2, zi2);
|
|
62728
|
+
if (mag2.x > 4.0) {
|
|
62729
|
+
return clamp((f32(i) - log2(log2(mag2.x)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62730
|
+
}
|
|
62731
|
+
let new_zi = ds_add(ds_mul(ds_add(zr, zr), zi), ci);
|
|
62732
|
+
zr = ds_add(ds_sub(zr2, zi2), cr);
|
|
62733
|
+
zi = new_zi;
|
|
62734
|
+
}
|
|
62735
|
+
return 1.0;
|
|
62736
|
+
}
|
|
62737
|
+
`;
|
|
62407
62738
|
var GPU_FRACTAL_PREAMBLE_GLSL = `
|
|
62408
62739
|
float _fractal_mandelbrot(vec2 c, int maxIter) {
|
|
62409
62740
|
vec2 z = vec2(0.0, 0.0);
|
|
@@ -62447,6 +62778,208 @@ fn _fractal_julia(z_in: vec2f, c: vec2f, maxIter: i32) -> f32 {
|
|
|
62447
62778
|
return 1.0;
|
|
62448
62779
|
}
|
|
62449
62780
|
`;
|
|
62781
|
+
var GPU_FRACTAL_PT_PREAMBLE_GLSL = `
|
|
62782
|
+
uniform sampler2D _refOrbit;
|
|
62783
|
+
uniform int _refOrbitLen;
|
|
62784
|
+
uniform int _refOrbitTexWidth;
|
|
62785
|
+
uniform float _pt_offset_x;
|
|
62786
|
+
uniform float _pt_offset_y;
|
|
62787
|
+
uniform float _pt_w;
|
|
62788
|
+
uniform float _pt_h;
|
|
62789
|
+
|
|
62790
|
+
vec2 _pt_delta() {
|
|
62791
|
+
float dx = _pt_offset_x + (v_uv.x - 0.5) * _pt_w;
|
|
62792
|
+
float dy = _pt_offset_y + (v_uv.y - 0.5) * _pt_h;
|
|
62793
|
+
return vec2(dx, dy);
|
|
62794
|
+
}
|
|
62795
|
+
|
|
62796
|
+
vec2 _pt_fetch_orbit(int i) {
|
|
62797
|
+
int y = i / _refOrbitTexWidth;
|
|
62798
|
+
int x = i - y * _refOrbitTexWidth;
|
|
62799
|
+
return texelFetch(_refOrbit, ivec2(x, y), 0).rg;
|
|
62800
|
+
}
|
|
62801
|
+
|
|
62802
|
+
float _fractal_mandelbrot_pt(vec2 delta_c, int maxIter) {
|
|
62803
|
+
float dr = 0.0;
|
|
62804
|
+
float di = 0.0;
|
|
62805
|
+
int orbitLen = min(maxIter, _refOrbitLen);
|
|
62806
|
+
for (int i = 0; i < orbitLen; i++) {
|
|
62807
|
+
vec2 Zn = _pt_fetch_orbit(i);
|
|
62808
|
+
// delta_{n+1} = 2*Z_n*delta_n + delta_n^2 + delta_c
|
|
62809
|
+
float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62810
|
+
float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62811
|
+
dr = new_dr;
|
|
62812
|
+
di = new_di;
|
|
62813
|
+
// Full z = Z_{n+1} + delta for escape check
|
|
62814
|
+
vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
|
|
62815
|
+
float zr = Zn1.x + dr;
|
|
62816
|
+
float zi = Zn1.y + di;
|
|
62817
|
+
float mag2 = zr * zr + zi * zi;
|
|
62818
|
+
if (mag2 > 4.0)
|
|
62819
|
+
return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62820
|
+
// Glitch detection: |delta|^2 > |Z|^2
|
|
62821
|
+
float dmag2 = dr * dr + di * di;
|
|
62822
|
+
float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62823
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62824
|
+
// Rebase to absolute coordinates and continue with single-float
|
|
62825
|
+
float abs_zr = Zn1.x + dr;
|
|
62826
|
+
float abs_zi = Zn1.y + di;
|
|
62827
|
+
// Reconstruct absolute c from reference + delta
|
|
62828
|
+
// (Use ds_from for the concept, but single-float suffices for fallback)
|
|
62829
|
+
float cx = abs_zr - dr + delta_c.x;
|
|
62830
|
+
float cy = abs_zi - di + delta_c.y;
|
|
62831
|
+
for (int j = i + 1; j < maxIter; j++) {
|
|
62832
|
+
float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
|
|
62833
|
+
abs_zi = 2.0 * abs_zr * abs_zi + cy;
|
|
62834
|
+
abs_zr = new_zr;
|
|
62835
|
+
mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
|
|
62836
|
+
if (mag2 > 4.0)
|
|
62837
|
+
return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62838
|
+
}
|
|
62839
|
+
return 1.0;
|
|
62840
|
+
}
|
|
62841
|
+
}
|
|
62842
|
+
return 1.0;
|
|
62843
|
+
}
|
|
62844
|
+
|
|
62845
|
+
float _fractal_julia_pt(vec2 z_delta, vec2 delta_c, int maxIter) {
|
|
62846
|
+
float dr = z_delta.x;
|
|
62847
|
+
float di = z_delta.y;
|
|
62848
|
+
int orbitLen = min(maxIter, _refOrbitLen);
|
|
62849
|
+
for (int i = 0; i < orbitLen; i++) {
|
|
62850
|
+
vec2 Zn = _pt_fetch_orbit(i);
|
|
62851
|
+
float new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62852
|
+
float new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62853
|
+
dr = new_dr;
|
|
62854
|
+
di = new_di;
|
|
62855
|
+
vec2 Zn1 = (i + 1 < orbitLen) ? _pt_fetch_orbit(i + 1) : vec2(0.0);
|
|
62856
|
+
float zr = Zn1.x + dr;
|
|
62857
|
+
float zi = Zn1.y + di;
|
|
62858
|
+
float mag2 = zr * zr + zi * zi;
|
|
62859
|
+
if (mag2 > 4.0)
|
|
62860
|
+
return clamp((float(i) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62861
|
+
float dmag2 = dr * dr + di * di;
|
|
62862
|
+
float Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62863
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62864
|
+
float abs_zr = Zn1.x + dr;
|
|
62865
|
+
float abs_zi = Zn1.y + di;
|
|
62866
|
+
float cx = delta_c.x;
|
|
62867
|
+
float cy = delta_c.y;
|
|
62868
|
+
for (int j = i + 1; j < maxIter; j++) {
|
|
62869
|
+
float new_zr = abs_zr * abs_zr - abs_zi * abs_zi + cx;
|
|
62870
|
+
abs_zi = 2.0 * abs_zr * abs_zi + cy;
|
|
62871
|
+
abs_zr = new_zr;
|
|
62872
|
+
mag2 = abs_zr * abs_zr + abs_zi * abs_zi;
|
|
62873
|
+
if (mag2 > 4.0)
|
|
62874
|
+
return clamp((float(j) - log2(log2(mag2)) + 4.0) / float(maxIter), 0.0, 1.0);
|
|
62875
|
+
}
|
|
62876
|
+
return 1.0;
|
|
62877
|
+
}
|
|
62878
|
+
}
|
|
62879
|
+
return 1.0;
|
|
62880
|
+
}
|
|
62881
|
+
`;
|
|
62882
|
+
var GPU_FRACTAL_PT_PREAMBLE_WGSL = `
|
|
62883
|
+
@group(0) @binding(1) var _refOrbit: texture_2d<f32>;
|
|
62884
|
+
var<uniform> _refOrbitLen: i32;
|
|
62885
|
+
var<uniform> _refOrbitTexWidth: i32;
|
|
62886
|
+
var<uniform> _pt_offset_x: f32;
|
|
62887
|
+
var<uniform> _pt_offset_y: f32;
|
|
62888
|
+
var<uniform> _pt_w: f32;
|
|
62889
|
+
var<uniform> _pt_h: f32;
|
|
62890
|
+
|
|
62891
|
+
fn _pt_delta(uv: vec2f) -> vec2f {
|
|
62892
|
+
let dx = _pt_offset_x + (uv.x - 0.5) * _pt_w;
|
|
62893
|
+
let dy = _pt_offset_y + (uv.y - 0.5) * _pt_h;
|
|
62894
|
+
return vec2f(dx, dy);
|
|
62895
|
+
}
|
|
62896
|
+
|
|
62897
|
+
fn _pt_fetch_orbit(i: i32) -> vec2f {
|
|
62898
|
+
let y = i / _refOrbitTexWidth;
|
|
62899
|
+
let x = i - y * _refOrbitTexWidth;
|
|
62900
|
+
return textureLoad(_refOrbit, vec2i(x, y), 0).rg;
|
|
62901
|
+
}
|
|
62902
|
+
|
|
62903
|
+
fn _fractal_mandelbrot_pt(delta_c: vec2f, maxIter: i32) -> f32 {
|
|
62904
|
+
var dr: f32 = 0.0;
|
|
62905
|
+
var di: f32 = 0.0;
|
|
62906
|
+
let orbitLen = min(maxIter, _refOrbitLen);
|
|
62907
|
+
for (var i: i32 = 0; i < orbitLen; i++) {
|
|
62908
|
+
let Zn = _pt_fetch_orbit(i);
|
|
62909
|
+
let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62910
|
+
let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62911
|
+
dr = new_dr;
|
|
62912
|
+
di = new_di;
|
|
62913
|
+
var Zn1 = vec2f(0.0);
|
|
62914
|
+
if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
|
|
62915
|
+
let zr = Zn1.x + dr;
|
|
62916
|
+
let zi = Zn1.y + di;
|
|
62917
|
+
var mag2 = zr * zr + zi * zi;
|
|
62918
|
+
if (mag2 > 4.0) {
|
|
62919
|
+
return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62920
|
+
}
|
|
62921
|
+
let dmag2 = dr * dr + di * di;
|
|
62922
|
+
let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62923
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62924
|
+
var f_zr = Zn1.x + dr;
|
|
62925
|
+
var f_zi = Zn1.y + di;
|
|
62926
|
+
let cx = delta_c.x;
|
|
62927
|
+
let cy = delta_c.y;
|
|
62928
|
+
for (var j: i32 = i + 1; j < maxIter; j++) {
|
|
62929
|
+
let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
|
|
62930
|
+
f_zi = 2.0 * f_zr * f_zi + cy;
|
|
62931
|
+
f_zr = t_zr;
|
|
62932
|
+
mag2 = f_zr * f_zr + f_zi * f_zi;
|
|
62933
|
+
if (mag2 > 4.0) {
|
|
62934
|
+
return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62935
|
+
}
|
|
62936
|
+
}
|
|
62937
|
+
return 1.0;
|
|
62938
|
+
}
|
|
62939
|
+
}
|
|
62940
|
+
return 1.0;
|
|
62941
|
+
}
|
|
62942
|
+
|
|
62943
|
+
fn _fractal_julia_pt(z_delta: vec2f, delta_c: vec2f, maxIter: i32) -> f32 {
|
|
62944
|
+
var dr = z_delta.x;
|
|
62945
|
+
var di = z_delta.y;
|
|
62946
|
+
let orbitLen = min(maxIter, _refOrbitLen);
|
|
62947
|
+
for (var i: i32 = 0; i < orbitLen; i++) {
|
|
62948
|
+
let Zn = _pt_fetch_orbit(i);
|
|
62949
|
+
let new_dr = 2.0 * (Zn.x * dr - Zn.y * di) + dr * dr - di * di + delta_c.x;
|
|
62950
|
+
let new_di = 2.0 * (Zn.x * di + Zn.y * dr) + 2.0 * dr * di + delta_c.y;
|
|
62951
|
+
dr = new_dr;
|
|
62952
|
+
di = new_di;
|
|
62953
|
+
var Zn1 = vec2f(0.0);
|
|
62954
|
+
if (i + 1 < orbitLen) { Zn1 = _pt_fetch_orbit(i + 1); }
|
|
62955
|
+
let zr = Zn1.x + dr;
|
|
62956
|
+
let zi = Zn1.y + di;
|
|
62957
|
+
var mag2 = zr * zr + zi * zi;
|
|
62958
|
+
if (mag2 > 4.0) {
|
|
62959
|
+
return clamp((f32(i) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62960
|
+
}
|
|
62961
|
+
let dmag2 = dr * dr + di * di;
|
|
62962
|
+
let Zmag2 = Zn.x * Zn.x + Zn.y * Zn.y;
|
|
62963
|
+
if (dmag2 > Zmag2 && Zmag2 > 0.0) {
|
|
62964
|
+
var f_zr = Zn1.x + dr;
|
|
62965
|
+
var f_zi = Zn1.y + di;
|
|
62966
|
+
let cx = delta_c.x;
|
|
62967
|
+
let cy = delta_c.y;
|
|
62968
|
+
for (var j: i32 = i + 1; j < maxIter; j++) {
|
|
62969
|
+
let t_zr = f_zr * f_zr - f_zi * f_zi + cx;
|
|
62970
|
+
f_zi = 2.0 * f_zr * f_zi + cy;
|
|
62971
|
+
f_zr = t_zr;
|
|
62972
|
+
mag2 = f_zr * f_zr + f_zi * f_zi;
|
|
62973
|
+
if (mag2 > 4.0) {
|
|
62974
|
+
return clamp((f32(j) - log2(log2(mag2)) + 4.0) / f32(maxIter), 0.0, 1.0);
|
|
62975
|
+
}
|
|
62976
|
+
}
|
|
62977
|
+
return 1.0;
|
|
62978
|
+
}
|
|
62979
|
+
}
|
|
62980
|
+
return 1.0;
|
|
62981
|
+
}
|
|
62982
|
+
`;
|
|
62450
62983
|
var GPU_COLOR_PREAMBLE_GLSL = `
|
|
62451
62984
|
float _gpu_srgb_to_linear(float c) {
|
|
62452
62985
|
if (c <= 0.04045) return c / 12.92;
|
|
@@ -62885,6 +63418,7 @@ var GPUShaderTarget = class {
|
|
|
62885
63418
|
const constants = this.getConstants();
|
|
62886
63419
|
const v2 = this.languageId === "wgsl" ? "vec2f" : "vec2";
|
|
62887
63420
|
const target = this.createTarget({
|
|
63421
|
+
hints: options.hints,
|
|
62888
63422
|
functions: (id) => {
|
|
62889
63423
|
if (userFunctions && id in userFunctions) {
|
|
62890
63424
|
const fn = userFunctions[id];
|
|
@@ -62923,12 +63457,89 @@ var GPUShaderTarget = class {
|
|
|
62923
63457
|
if (code.includes("_gpu_besselJ"))
|
|
62924
63458
|
preamble += this.languageId === "wgsl" ? GPU_BESSELJ_PREAMBLE_WGSL : GPU_BESSELJ_PREAMBLE_GLSL;
|
|
62925
63459
|
if (code.includes("_fractal_")) {
|
|
62926
|
-
|
|
63460
|
+
if (code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) {
|
|
63461
|
+
preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
|
|
63462
|
+
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PT_PREAMBLE_WGSL : GPU_FRACTAL_PT_PREAMBLE_GLSL;
|
|
63463
|
+
} else if (code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) {
|
|
63464
|
+
preamble += this.languageId === "wgsl" ? GPU_DS_ARITHMETIC_PREAMBLE_WGSL : GPU_DS_ARITHMETIC_PREAMBLE_GLSL;
|
|
63465
|
+
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_DP_PREAMBLE_WGSL : GPU_FRACTAL_DP_PREAMBLE_GLSL;
|
|
63466
|
+
} else {
|
|
63467
|
+
preamble += this.languageId === "wgsl" ? GPU_FRACTAL_PREAMBLE_WGSL : GPU_FRACTAL_PREAMBLE_GLSL;
|
|
63468
|
+
}
|
|
62927
63469
|
}
|
|
62928
63470
|
if (code.includes("_gpu_srgb_to") || code.includes("_gpu_oklab") || code.includes("_gpu_oklch") || code.includes("_gpu_color_mix") || code.includes("_gpu_apca")) {
|
|
62929
63471
|
preamble += this.languageId === "wgsl" ? GPU_COLOR_PREAMBLE_WGSL : GPU_COLOR_PREAMBLE_GLSL;
|
|
62930
63472
|
}
|
|
62931
63473
|
if (preamble) result.preamble = preamble;
|
|
63474
|
+
if (code.includes("_fractal_") && options.hints?.viewport) {
|
|
63475
|
+
const strategy = selectFractalStrategy(target);
|
|
63476
|
+
const radius = options.hints.viewport.radius;
|
|
63477
|
+
switch (strategy) {
|
|
63478
|
+
case "single":
|
|
63479
|
+
result.staleWhen = { radiusBelow: 1e-6 };
|
|
63480
|
+
break;
|
|
63481
|
+
case "double":
|
|
63482
|
+
result.staleWhen = { radiusBelow: 1e-14, radiusAbove: 1e-5 };
|
|
63483
|
+
break;
|
|
63484
|
+
case "perturbation":
|
|
63485
|
+
result.staleWhen = {
|
|
63486
|
+
radiusAbove: 1e-5,
|
|
63487
|
+
radiusBelow: radius * 0.01,
|
|
63488
|
+
centerDistance: radius * 2
|
|
63489
|
+
};
|
|
63490
|
+
break;
|
|
63491
|
+
}
|
|
63492
|
+
}
|
|
63493
|
+
if ((code.includes("_fractal_mandelbrot_dp") || code.includes("_fractal_julia_dp")) && options.hints?.viewport) {
|
|
63494
|
+
const cx = hpToNumber(options.hints.viewport.center[0]);
|
|
63495
|
+
const cy = hpToNumber(options.hints.viewport.center[1]);
|
|
63496
|
+
const size = options.hints.viewport.radius * 2;
|
|
63497
|
+
const cx_hi = Math.fround(cx);
|
|
63498
|
+
const cy_hi = Math.fround(cy);
|
|
63499
|
+
result.uniforms = {
|
|
63500
|
+
...result.uniforms,
|
|
63501
|
+
_dp_cx_hi: cx_hi,
|
|
63502
|
+
_dp_cx_lo: cx - cx_hi,
|
|
63503
|
+
_dp_cy_hi: cy_hi,
|
|
63504
|
+
_dp_cy_lo: cy - cy_hi,
|
|
63505
|
+
_dp_w: size,
|
|
63506
|
+
_dp_h: size
|
|
63507
|
+
};
|
|
63508
|
+
}
|
|
63509
|
+
if ((code.includes("_fractal_mandelbrot_pt") || code.includes("_fractal_julia_pt")) && options.hints?.viewport) {
|
|
63510
|
+
const viewport = options.hints.viewport;
|
|
63511
|
+
const size = viewport.radius * 2;
|
|
63512
|
+
result.uniforms = {
|
|
63513
|
+
...result.uniforms,
|
|
63514
|
+
_pt_offset_x: 0,
|
|
63515
|
+
_pt_offset_y: 0,
|
|
63516
|
+
_pt_w: size,
|
|
63517
|
+
_pt_h: size
|
|
63518
|
+
};
|
|
63519
|
+
const digits = Math.max(50, Math.ceil(-Math.log10(viewport.radius)) + 10);
|
|
63520
|
+
const maxIter = 1e3;
|
|
63521
|
+
const orbit = computeReferenceOrbit(
|
|
63522
|
+
viewport.center,
|
|
63523
|
+
maxIter,
|
|
63524
|
+
digits
|
|
63525
|
+
);
|
|
63526
|
+
const orbitLen = orbit.length / 2;
|
|
63527
|
+
const texWidth = Math.min(orbitLen, 4096);
|
|
63528
|
+
const texHeight = Math.ceil(orbitLen / texWidth);
|
|
63529
|
+
result.textures = {
|
|
63530
|
+
_refOrbit: {
|
|
63531
|
+
data: orbit,
|
|
63532
|
+
width: texWidth,
|
|
63533
|
+
height: texHeight,
|
|
63534
|
+
format: "rg32f"
|
|
63535
|
+
}
|
|
63536
|
+
};
|
|
63537
|
+
result.uniforms = {
|
|
63538
|
+
...result.uniforms,
|
|
63539
|
+
_refOrbitLen: orbitLen,
|
|
63540
|
+
_refOrbitTexWidth: texWidth
|
|
63541
|
+
};
|
|
63542
|
+
}
|
|
62932
63543
|
return result;
|
|
62933
63544
|
}
|
|
62934
63545
|
compileToSource(expr2, _options = {}) {
|
|
@@ -67911,7 +68522,7 @@ var ComputeEngine = class _ComputeEngine {
|
|
|
67911
68522
|
_setDefaultEngineFactory(() => new ComputeEngine());
|
|
67912
68523
|
|
|
67913
68524
|
// src/core.ts
|
|
67914
|
-
var version = "0.55.
|
|
68525
|
+
var version = "0.55.5";
|
|
67915
68526
|
export {
|
|
67916
68527
|
ComputeEngine,
|
|
67917
68528
|
N,
|