OLD | NEW |
1 Overview | 1 Overview |
2 ======== | 2 ======== |
3 | 3 |
4 SkSL ("Skia Shading Language") is a variant of GLSL which is used as Skia's | 4 SkSL ("Skia Shading Language") is a variant of GLSL which is used as Skia's |
5 internal shading language. SkSL is, at its heart, a single standardized version | 5 internal shading language. SkSL is, at its heart, a single standardized version |
6 of GLSL which avoids all of the various version and dialect differences found | 6 of GLSL which avoids all of the various version and dialect differences found |
7 in GLSL "in the wild", but it does bring a few of its own changes to the table. | 7 in GLSL "in the wild", but it does bring a few of its own changes to the table. |
8 | 8 |
9 Skia uses the SkSL compiler to convert SkSL code to GLSL, GLSL ES, or SPIR-V | 9 Skia uses the SkSL compiler to convert SkSL code to GLSL, GLSL ES, or SPIR-V |
10 before handing it over to the graphics driver. | 10 before handing it over to the graphics driver. |
11 | 11 |
12 Differences from GLSL | 12 Differences from GLSL |
13 ===================== | 13 ===================== |
14 | 14 |
15 SkSL is based on GLSL 4.5. For the most part, write SkSL exactly as you would | 15 SkSL is based on GLSL 4.5. For the most part, write SkSL exactly as you would |
16 desktop GLSL, and the SkSL compiler will take care of version and dialect | 16 desktop GLSL, and the SkSL compiler will take care of version and dialect |
17 differences (for instance, you always use "in" and "out", and skslc will handle | 17 differences (for instance, you always use "in" and "out", and skslc will handle |
18 translating them to "varying" and "attribute" as appropriate). Be aware of the | 18 translating them to "varying" and "attribute" as appropriate). Be aware of the |
19 following differences between SkSL and GLSL: | 19 following differences between SkSL and GLSL: |
20 | 20 |
21 * no #version or "precision" statement is required, and they will be ignored if | 21 * no #version statement is required, and will be ignored if present |
22 present | |
23 * the output color is sk_FragColor (do not declare it) | 22 * the output color is sk_FragColor (do not declare it) |
24 * lowp, mediump, and highp are always permitted (but will only be respected if | 23 * lowp, mediump, and highp are always permitted (but will only be respected if |
25 you run on a GLES device) | 24 you run on a GLES device) |
26 * you do not need to include ".0" to make a number a float (meaning that | 25 * you do not need to include ".0" to make a number a float (meaning that |
27 "vec2(x, y) * 4" is perfectly legal in SkSL, unlike GLSL where it would often | 26 "vec2(x, y) * 4" is perfectly legal in SkSL, unlike GLSL where it would often |
28 have to be expressed "vec2(x, y) * 4.0". There is no performance penalty for | 27 have to be expressed "vec2(x, y) * 4.0". There is no performance penalty for |
29 this, as the number is converted to a float at compile time) | 28 this, as the number is converted to a float at compile time) |
30 * type suffixes on numbers (1.0f, 0xFFu) are both unnecessary and unsupported | 29 * type suffixes on numbers (1.0f, 0xFFu) are both unnecessary and unsupported |
31 * some built-in functions and one or two rarely-used language features are not | 30 * some built-in functions and one or two rarely-used language features are not |
32 yet supported (sorry!) | 31 yet supported (sorry!) |
33 | 32 |
34 SkSL is still under development, and is expected to diverge further from GLSL | 33 SkSL is still under development, and is expected to diverge further from GLSL |
35 over time. | 34 over time. |
OLD | NEW |