| // CodeMirror likes mode definitions as maps to bools, but a string of space |
| // separated words is easier to edit, so we convert our strings into a map here. |
| function words(str: string) { |
| const obj: Record<string, boolean> = {}; |
| str.split(' ').forEach((word: string) => { |
| obj[word] = true; |
| }); |
| return obj; |
| } |
| |
| // See the design doc for the list of keywords. http://go/shaders.skia.org |
| export const keywords = words( |
| 'const attribute uniform varying break continue ' + |
| 'discard return for while do if else struct in out inout uniform layout' |
| ); |
| |
| export const blockKeywords = words( |
| 'case do else for if switch while struct enum union' |
| ); |
| |
| export const defKeywords = words('struct enum union'); |
| |
| export const atoms = words('sk_FragCoord true false'); |
| |
| export const builtins = words( |
| 'radians degrees ' + |
| 'sin cos tan asin acos atan ' + |
| 'pow exp log exp2 log2 ' + |
| 'sqrt inversesqrt ' + |
| 'abs sign floor ceil fract mod ' + |
| 'min max clamp saturate ' + |
| 'mix step smoothstep ' + |
| 'length distance dot cross normalize ' + |
| 'faceforward reflect refract ' + |
| 'matrixCompMult inverse ' + |
| 'lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual ' + |
| 'any all not ' + |
| 'sample unpremul' |
| ); |
| |
| export const types = words( |
| 'int long char short double float unsigned ' + |
| 'signed void bool float float2 float3 float4 ' + |
| 'float2x2 float3x3 float4x4 ' + |
| 'half half2 half3 half4 ' + |
| 'half2x2 half3x3 half4x4 ' + |
| 'bool bool2 bool3 bool4 ' + |
| 'int int2 int3 int4 ' + |
| 'fragmentProcessor shader ' + |
| 'vec2 vec3 vec4 ' + |
| 'ivec2 ivec3 ivec4 ' + |
| 'bvec2 bvec3 bvec4 ' + |
| 'mat2 mat3 mat4' |
| ); |