181 plot(canvas,
"radians(x)", 0.0f, 360.0f, 0.0f, kTwoPI);
182 plot(canvas,
"degrees(x)", 0.0f, kTwoPI, 0.0f, 360.0f);
185 plot(canvas,
"sin(x)", 0.0f, kTwoPI, -1.0f, 1.0f);
186 plot(canvas,
"cos(x)", 0.0f, kTwoPI, -1.0f, 1.0f);
187 plot(canvas,
"tan(x)", 0.0f, kPI, -10.0f, 10.0f);
190 plot(canvas,
"asin(x)", -1.0f, 1.0f, -kPIOverTwo, kPIOverTwo);
191 plot(canvas,
"acos(x)", -1.0f, 1.0f, 0.0f, kPI);
192 plot(canvas,
"atan(x)", -10.0f, 10.0f, -kPIOverTwo, kPIOverTwo);
195 plot(canvas,
"atan(0.1, x)", -1.0f, 1.0f, 0.0f, kPI);
196 plot(canvas,
"atan(-0.1, x)", -1.0f, 1.0f, -kPI, 0.0f);
199 plot(canvas,
"atan(x, 0.1)", -1.0f, 1.0f, -kPIOverTwo, kPIOverTwo);
200 plot(canvas,
"atan(x, -0.1)", -1.0f, 1.0f, -kPI, kPI);
206 ctx, canvas, errorMsg,
210 *errorMsg =
"SkSL 300 is not supported.";
217 plot_es3(canvas,
"sinh(x)", -2.0f, 2.0f, -4.0f, 4.0f);
218 plot_es3(canvas,
"cosh(x)", -2.0f, 2.0f, 0.0f, 4.0f);
219 plot_es3(canvas,
"tanh(x)", -2.0f, 2.0f, -1.0f, 1.0f);
222 if (ctx->priv().caps()->shaderCaps()->fInverseHyperbolicSupport) {
223 plot_es3(canvas,
"asinh(x)", -2.0f, 2.0f, -2.0f, 2.0f);
224 plot_es3(canvas,
"acosh(x)", 0.0f, 5.0f, 0.0f, 3.0f);
225 plot_es3(canvas,
"atanh(x)", -1.0f, 1.0f, -4.0f, 4.0f);
240 plot(canvas,
"pow(x, 3)", 0.0f, 8.0f, 0.0f, 500.0f);
241 plot(canvas,
"pow(x, -3)", 0.0f, 4.0f, 0.0f, 10.0f);
244 plot(canvas,
"pow(0.9, x)", -10.0f, 10.0f, 0.0f, 3.0f);
245 plot(canvas,
"pow(1.1, x)", -10.0f, 10.0f, 0.0f, 3.0f);
248 plot(canvas,
"exp(x)", -1.0f, 7.0f, 0.0f, 1000.0f);
249 plot(canvas,
"log(x)", 0.0f, 2.5f, -4.0f, 1.0f);
252 plot(canvas,
"exp2(x)", -1.0f, 7.0f, 0.0f, 130.0f);
253 plot(canvas,
"log2(x)", 0.0f, 4.0f, -4.0f, 2.0f);
256 plot(canvas,
"sqrt(x)", 0.0f, 25.0f, 0.0f, 5.0f);
257 plot(canvas,
"inversesqrt(x)", 0.0f, 25.0f, 0.2f, 4.0f);
269 plot(canvas,
"abs(x)", -10.0f, 10.0f, 0.0f, 10.0f);
270 plot(canvas,
"sign(x)", -1.0f, 1.0f, -1.5f, 1.5f);
273 plot(canvas,
"floor(x)", -3.0f, 3.0f, -4.0f, 4.0f);
274 plot(canvas,
"ceil(x)", -3.0f, 3.0f, -4.0f, 4.0f);
275 plot(canvas,
"fract(x)", -3.0f, 3.0f, 0.0f, 1.0f);
276 plot(canvas,
"mod(x, 2)", -4.0f, 4.0f, -2.0f, 2.0f,
"mod(scalar)");
277 plot(canvas,
"mod(p, -2).x", -4.0f, 4.0f, -2.0f, 2.0f,
"mod(mixed)" );
278 plot(canvas,
"mod(p, v2).x", -4.0f, 4.0f, -2.0f, 2.0f,
"mod(vector)");
281 plot(canvas,
"min(x, 1)", 0.0f, 2.0f, 0.0f, 2.0f,
"min(scalar)");
282 plot(canvas,
"min(p, 1).x", 0.0f, 2.0f, 0.0f, 2.0f,
"min(mixed)" );
283 plot(canvas,
"min(p, v1).x", 0.0f, 2.0f, 0.0f, 2.0f,
"min(vector)");
284 plot(canvas,
"max(x, 1)", 0.0f, 2.0f, 0.0f, 2.0f,
"max(scalar)");
285 plot(canvas,
"max(p, 1).x", 0.0f, 2.0f, 0.0f, 2.0f,
"max(mixed)" );
286 plot(canvas,
"max(p, v1).x", 0.0f, 2.0f, 0.0f, 2.0f,
"max(vector)");
289 plot(canvas,
"clamp(x, 1, 2)", 0.0f, 3.0f, 0.0f, 3.0f,
"clamp(scalar)");
290 plot(canvas,
"clamp(p, 1, 2).x", 0.0f, 3.0f, 0.0f, 3.0f,
"clamp(mixed)" );
291 plot(canvas,
"clamp(p, v1, v2).x", 0.0f, 3.0f, 0.0f, 3.0f,
"clamp(vector)");
292 plot(canvas,
"saturate(x)", -1.0f, 2.0f, -0.5f, 1.5f);
295 plot(canvas,
"mix(1, 2, x)", -1.0f, 2.0f, 0.0f, 3.0f,
"mix(scalar)");
296 plot(canvas,
"mix(v1, v2, x).x", -1.0f, 2.0f, 0.0f, 3.0f,
"mix(mixed)" );
297 plot(canvas,
"mix(v1, v2, p).x", -1.0f, 2.0f, 0.0f, 3.0f,
"mix(vector)");
300 plot(canvas,
"step(1, x)", 0.0f, 2.0f, -0.5f, 1.5f,
"step(scalar)");
301 plot(canvas,
"step(1, p).x", 0.0f, 2.0f, -0.5f, 1.5f,
"step(mixed)" );
302 plot(canvas,
"step(v1, p).x", 0.0f, 2.0f, -0.5f, 1.5f,
"step(vector)");
303 plot(canvas,
"smoothstep(1, 2, x)", 0.5f, 2.5f, -0.5f, 1.5f,
"smooth(scalar)");
304 plot(canvas,
"smoothstep(1, 2, p).x", 0.5f, 2.5f, -0.5f, 1.5f,
"smooth(mixed)" );
305 plot(canvas,
"smoothstep(v1, v2, p).x", 0.5f, 2.5f, -0.5f, 1.5f,
"smooth(vector)");
308 plot(canvas,
"floor(p).x", -3.0f, 3.0f, -4.0f, 4.0f);
309 plot(canvas,
"ceil(p).x", -3.0f, 3.0f, -4.0f, 4.0f);
310 plot(canvas,
"floor(p).y", -3.0f, 3.0f, -4.0f, 4.0f);
311 plot(canvas,
"ceil(p).y", -3.0f, 3.0f, -4.0f, 4.0f);
317 ctx, canvas, errorMsg,
321 *errorMsg =
"SkSL 300 is not supported.";
328 plot_es3(canvas,
"floatBitsToInt(x)", -2, 2, -2'000'000'000, 2'000'000'000,
329 "floatBitsToInt(s)");
330 plot_es3(canvas,
"floatBitsToInt(p).x", -2, 2, -2'000'000'000, 2'000'000'000,
331 "floatBitsToInt(v)");
332 plot_es3(canvas,
"floatBitsToUint(x)", -2, 2, 0, 4'000'000'000,
333 "floatBitsToUint(s)");
334 plot_es3(canvas,
"floatBitsToUint(p).x", -2, 2, 0, 4'000'000'000,
335 "floatBitsToUint(v)");
338 plot_es3(canvas,
"intBitsToFloat(xi)", -2'000'000'000, 2'000'000'000, -2, 2,
339 "intBitsToFloat(s)");
340 plot_es3(canvas,
"intBitsToFloat(pi).x", -2'000'000'000, 2'000'000'000, -2, 2,
341 "intBitsToFloat(v)");
342 plot_es3(canvas,
"uintBitsToFloat(uint(xi))", 0, 4'000'000'000, -2, 2,
343 "uintBitsToFloat(s)");
344 plot_es3(canvas,
"uintBitsToFloat(uint2(pi)).x", 0, 4'000'000'000, -2, 2,
345 "uintBitsToFloat(v)");
348 plot_es3(canvas,
"trunc(x)", -2, 2, -3, 3);
349 plot_es3(canvas,
"trunc(p).x", -2, 2, -3, 3);
350 plot_es3(canvas,
"round(x)", -2, 2, -3, 3);
351 plot_es3(canvas,
"round(p).x", -2, 2, -3, 3);
352 plot_es3(canvas,
"roundEven(x)", -2, 2, -3, 3);
353 plot_es3(canvas,
"roundEven(p).x", -2, 2, -3, 3);
356 plot_es3(canvas,
"min(xi, 1)", -2, 5, -3, 5,
"min(int-scalar)");
357 plot_es3(canvas,
"min(pi, 1).x", -2, 5, -3, 5,
"min(int-mixed)" );
358 plot_es3(canvas,
"min(pi, int2(1)).x", -2, 5, -3, 5,
"min(int-vector)");
359 plot_es3(canvas,
"max(xi, 1)", -2, 5, -3, 5,
"max(int-scalar)");
360 plot_es3(canvas,
"max(pi, 1).x", -2, 5, -3, 5,
"max(int-mixed)" );
361 plot_es3(canvas,
"max(pi, int2(1)).x", -2, 5, -3, 5,
"max(int-vector)");
364 plot_es3(canvas,
"clamp(xi, 1, 3)", -1, 5, -1, 5,
"clamp(int-scalar)");
365 plot_es3(canvas,
"clamp(pi, 1, 3).x", -1, 5, -1, 5,
"clamp(int-mixed)" );
366 plot_es3(canvas,
"clamp(pi, int2(1), int2(3)).x", -1, 5, -1, 5,
"clamp(int-vector)");
367 plot_es3(canvas,
"mix(p.x, p.y, (x>0) )", -1, 2, 0, 3,
"mix(scalar, bool)");
368 plot_es3(canvas,
"mix(p.yx, p, (x>0).xx).x", -1, 2, 0, 3,
"mix(vector, bool)");
383 plot(canvas,
"length(x)", -1.0f, 1.0f, -0.5f, 1.5f);
384 plot(canvas,
"length(p)", 0.0f, 1.0f, 0.5f, 1.5f);
385 plot(canvas,
"distance(x, 0)", -1.0f, 1.0f, -0.5f, 1.5f);
386 plot(canvas,
"distance(p, v1)", 0.0f, 1.0f, 0.5f, 1.5f);
389 plot(canvas,
"dot(x, 2)", -1.0f, 1.0f, -2.5f, 2.5f);
390 plot(canvas,
"dot(p, p.y1)", -1.0f, 1.0f, -2.5f, 0.5f);
393 plot(canvas,
"cross(p.xy1, p.y1x).x", 0.0f, 1.0f, -1.0f, 1.0f);
394 plot(canvas,
"cross(p.xy1, p.y1x).y", 0.0f, 1.0f, -1.0f, 1.0f);
395 plot(canvas,
"cross(p.xy1, p.y1x).z", 0.0f, 1.0f, -1.0f, 1.0f);
398 plot(canvas,
"normalize(x)", -2.0f, 2.0f, -1.5f, 1.5f);
399 plot(canvas,
"normalize(p).x", 0.0f, 2.0f, 0.0f, 1.0f);
400 plot(canvas,
"normalize(p).y", 0.0f, 2.0f, 0.0f, 1.0f);
401 plot(canvas,
"faceforward(v1, p.x0, v1.x0).x", -1.0f, 1.0f, -1.5f, 1.5f,
"faceforward");
404 plot(canvas,
"reflect(p.x1, v1.0x).x", -1.0f, 1.0f, -1.0f, 1.0f,
"reflect(horiz)");
405 plot(canvas,
"reflect(p.x1, normalize(v1)).y", -1.0f, 1.0f, -1.0f, 1.0f,
"reflect(diag)" );
406 plot(canvas,
"refract(v1.x0, v1.0x, x).x", 0.0f, 1.0f, -1.0f, 1.0f,
"refract().x");
407 plot(canvas,
"refract(v1.x0, v1.0x, x).y", 0.0f, 1.0f, -1.0f, 1.0f,
"refract().y");
518 plot_matrix_comp_mult<2>(canvas,
519 {1.00f, 0.0f, 2.0f, 0.5f},
520 {0.75f, 2.0f, 0.2f, 1.2f},
523 plot_matrix_comp_mult<3>(canvas,
524 {1.00f, 0.0f, 2.0f, 0.5f, -1.0f, -2.0f, -0.5f, 4.00f, 0.25f},
525 {0.75f, 2.0f, 0.2f, 1.2f, -0.8f, -0.1f, -1.8f, 0.25f, 2.00f},
528 plot_matrix_comp_mult<4>(canvas,
529 {1.00f, 0.0f, 2.0f, 0.5f, -1.0f, -2.0f, -0.5f, 4.00f, 0.25f, 0.05f,
530 10.00f, -0.66f, -1.0f, -0.5f, 0.5f, 0.66f},
531 {0.75f, 2.0f, 0.2f, 1.2f, -0.8f, -0.1f, -1.8f, 0.25f, 2.00f, 2.00f,
532 0.03f, -1.00f, -1.0f, -0.5f, 1.7f, 0.66f},
537 plot_matrix_inverse<2>(canvas,
542 plot_matrix_inverse<3>(canvas,
543 {-1.13f, -2.96f, -0.14f,
544 1.45f, -1.88f, -1.02f,
545 -2.54f, -2.58f, -1.17f},
548 plot_matrix_inverse<4>(canvas,
549 {-1.51f, -3.95f, -0.19f, 1.93f,
550 -2.51f, -1.35f, -3.39f, -3.45f,
551 -1.56f, 1.61f, -0.22f, -1.08f,
552 -2.81f, -2.14f, -0.09f, 3.00f},