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