• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1CanvasKit._extraInitializations = CanvasKit._extraInitializations || [];
2CanvasKit._extraInitializations.push(function() {
3
4  // sksl is the shader code.
5  // errorCallback is a function that will be called with an error string if the
6  // effect cannot be made. If not provided, the error will be logged.
7  CanvasKit.RuntimeEffect.Make = function(sksl, errorCallback) {
8    // The easiest way to pass a function into C++ code is to wrap it in an object and
9    // treat it as an emscripten::val on the other side.
10    var callbackObj = {
11      'onError': errorCallback || function(err) {
12        console.log('RuntimeEffect error', err);
13      },
14    };
15    return CanvasKit.RuntimeEffect._Make(sksl, callbackObj);
16  };
17
18  CanvasKit.RuntimeEffect.prototype.makeShader = function(floats, isOpaque, localMatrix) {
19    // We don't need to free these floats because they will become owned by the shader.
20    var fptr = copy1dArray(floats, "HEAPF32");
21    var localMatrixPtr = copy3x3MatrixToWasm(localMatrix);
22    // Our array has 4 bytes per float, so be sure to account for that before
23    // sending it over the wire.
24    return this._makeShader(fptr, floats.length * 4, !!isOpaque, localMatrixPtr);
25  }
26
27  // childrenWithShaders is an array of other shaders (e.g. Image.makeShader())
28  CanvasKit.RuntimeEffect.prototype.makeShaderWithChildren = function(floats, isOpaque, childrenShaders, localMatrix) {
29    // We don't need to free these floats because they will become owned by the shader.
30    var fptr = copy1dArray(floats, "HEAPF32");
31    var localMatrixPtr = copy3x3MatrixToWasm(localMatrix);
32    var barePointers = [];
33    for (var i = 0; i < childrenShaders.length; i++) {
34      // childrenShaders are emscriptens smart pointer type. We want to get the bare pointer
35      // and send that over the wire, so it can be re-wrapped as an sk_sp.
36      barePointers.push(childrenShaders[i].$$.ptr);
37    }
38    var childrenPointers = copy1dArray(barePointers, "HEAPU32");
39    // Our array has 4 bytes per float, so be sure to account for that before
40    // sending it over the wire.
41    return this._makeShaderWithChildren(fptr, floats.length * 4, !!isOpaque, childrenPointers,
42                                        barePointers.length, localMatrixPtr);
43  }
44});
45