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