All files / engine/Source/Scene GaussianSplatTextureGenerator.js

86.36% Statements 19/22
75% Branches 6/8
60% Functions 3/5
86.36% Lines 19/22

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65              1x         1x 1x 1x 1x 8x 1x       1x         1x 1x                   1x     8x     1x   8x 8x       8x 2x     6x 6x                  
import defined from "../Core/defined.js";
import FeatureDetection from "../Core/FeatureDetection.js";
import RuntimeError from "../Core/RuntimeError.js";
import TaskProcessor from "../Core/TaskProcessor.js";
 
function GaussianSplatTextureGenerator() {}
 
GaussianSplatTextureGenerator._maxSortingConcurrency = Math.max(
  FeatureDetection.hardwareConcurrency - 1,
  1,
);
 
GaussianSplatTextureGenerator._textureTaskProcessor = undefined;
GaussianSplatTextureGenerator._taskProcessorReady = false;
GaussianSplatTextureGenerator._error = undefined;
GaussianSplatTextureGenerator._getTextureTaskProcessor = function () {
  if (!defined(GaussianSplatTextureGenerator._textureTaskProcessor)) {
    const processor = new TaskProcessor(
      "gaussianSplatTextureGenerator",
      GaussianSplatTextureGenerator._maxSortingConcurrency,
    );
    processor
      .initWebAssemblyModule({
        wasmBinaryFile: "ThirdParty/wasm_splats_bg.wasm",
      })
      .then(function (result) {
        if (result) {
          GaussianSplatTextureGenerator._taskProcessorReady = true;
        } else E{
          GaussianSplatTextureGenerator._error = new RuntimeError(
            "Gaussian splat sorter could not be initialized.",
          );
        }
      })
      .catch((error) => {
        GaussianSplatTextureGenerator._error = error;
      });
    GaussianSplatTextureGenerator._textureTaskProcessor = processor;
  }
 
  return GaussianSplatTextureGenerator._textureTaskProcessor;
};
 
GaussianSplatTextureGenerator.generateFromAttributes = function (parameters) {
  const textureTaskProcessor =
    GaussianSplatTextureGenerator._getTextureTaskProcessor();
  Iif (defined(GaussianSplatTextureGenerator._error)) {
    throw GaussianSplatTextureGenerator._error;
  }
 
  if (!GaussianSplatTextureGenerator._taskProcessorReady) {
    return;
  }
 
  const { attributes } = parameters;
  return textureTaskProcessor.scheduleTask(parameters, [
    attributes.positions.buffer,
    attributes.scales.buffer,
    attributes.rotations.buffer,
    attributes.colors.buffer,
  ]);
};
 
export default GaussianSplatTextureGenerator;