Added missing keywords for autocomplete and syntax highlighting - implements #2
This commit is contained in:
parent
233c7e1b96
commit
6d1a06ac1a
1 changed files with 136 additions and 60 deletions
196
src/Editor.gd
196
src/Editor.gd
|
@ -4,12 +4,15 @@ extends Control
|
||||||
@onready var code_editor = $CodeEdit
|
@onready var code_editor = $CodeEdit
|
||||||
var selected_preset_name = ShaderPresets.default_preset
|
var selected_preset_name = ShaderPresets.default_preset
|
||||||
|
|
||||||
|
# # # # # # # # # # #
|
||||||
|
# GDShader keywords #
|
||||||
|
# https://github.com/godotengine/godot/blob/e96ad5af98547df71b50c4c4695ac348638113e0/servers/rendering/shader_language.cpp
|
||||||
|
# https://github.com/godotengine/godot/blob/e96ad5af98547df71b50c4c4695ac348638113e0/servers/rendering/shader_types.cpp
|
||||||
#
|
#
|
||||||
|
const gdshader_boolean_values = [
|
||||||
|
"true", "false"
|
||||||
|
]
|
||||||
const gdshader_datatypes = [
|
const gdshader_datatypes = [
|
||||||
"in", "out", "inout",
|
|
||||||
"varying", "uniform",
|
|
||||||
"const", "lowp", "mediump", "heighp",
|
|
||||||
"void",
|
"void",
|
||||||
"bool", "bvec2", "bvec3", "bvec4",
|
"bool", "bvec2", "bvec3", "bvec4",
|
||||||
"int", "ivec2", "ivec3", "ivec4",
|
"int", "ivec2", "ivec3", "ivec4",
|
||||||
|
@ -21,79 +24,152 @@ const gdshader_datatypes = [
|
||||||
"sample3D", "isampler3D", "usample3D",
|
"sample3D", "isampler3D", "usample3D",
|
||||||
"samplerCube", "sampleCubeArray"
|
"samplerCube", "sampleCubeArray"
|
||||||
]
|
]
|
||||||
|
const gdshader_precision_modifiers = [
|
||||||
|
"lowp", "mediump", "heighp"
|
||||||
|
]
|
||||||
|
const gdshader_global_space_keywords = [
|
||||||
|
"uniform", "group_uniforms", "varying", "const",
|
||||||
|
"struct", "shader_type", "render_mode"
|
||||||
|
]
|
||||||
|
const gdshader_uniform_qualifiers = [
|
||||||
|
"instance", "global"
|
||||||
|
]
|
||||||
|
const gdshader_block_keywords = [
|
||||||
|
"if", "else",
|
||||||
|
"for", "while", "do",
|
||||||
|
"switch", "case",
|
||||||
|
"default", "break", "continue",
|
||||||
|
"return", "discard"
|
||||||
|
]
|
||||||
|
const gdshader_function_specifier_keywords = [
|
||||||
|
"in", "out", "inout"
|
||||||
|
]
|
||||||
|
const gdshader_hints = [
|
||||||
|
"source_color", "hint_range", "instance_index"
|
||||||
|
]
|
||||||
|
const gdshader_sampler_hints = [
|
||||||
|
"hint_normal",
|
||||||
|
"hint_default_white", "hint_default_black", "hint_default_transparent",
|
||||||
|
"hint_anisotropy",
|
||||||
|
"hint_roughness_r", "hint_roughness_g", "hint_roughness_b", "hint_roughness_a",
|
||||||
|
"hint_roughness_normal", "hint_roughness_gray",
|
||||||
|
"hint_screen_texture", "hint_normal_roughness_texture",
|
||||||
|
"hint_depth_texture",
|
||||||
|
"filter_nearest", "filter_linear",
|
||||||
|
"filter_nearest_mipmap", "filter_linear_mipmap",
|
||||||
|
"filter_nearest_mipmap_anisotropic", "filter_linear_mipmap_anisotropic",
|
||||||
|
"repeat_enable", "repeat_disable"
|
||||||
|
]
|
||||||
|
const gdshader_builtin_functions = [
|
||||||
|
"radians", "degrees",
|
||||||
|
"sin", "cos", "tan", "asin", "acos", "atan", "sinh", "cosh", "tanh",
|
||||||
|
"asinh", "acosh", "atanh",
|
||||||
|
"pow", "exp", "log", "exp2", "log2", "sqrt", "inversesqrt",
|
||||||
|
"abs", "sign", "floor", "trunc", "round", "roundEven", "ceil", "fract",
|
||||||
|
"mod", "modf", "min", "max", "clamp",
|
||||||
|
"mix", "step", "smoothstep",
|
||||||
|
"isnan", "isinf",
|
||||||
|
"floatBitsToInt", "floatBitsToUint", "intBitsToFloat", "uintBitsToFloat",
|
||||||
|
"length", "distance",
|
||||||
|
"dot", "cross",
|
||||||
|
"normalize", "reflect", "refract", "faceforward",
|
||||||
|
"matrixCompMult", "outerProduct", "transpose",
|
||||||
|
"determinant", "inverse",
|
||||||
|
"lessThan", "greaterThan", "lessThanEqual", "greaterThanEqual",
|
||||||
|
"equal", "notEqual",
|
||||||
|
"any", "all", "not",
|
||||||
|
"textureSize", "texture", "textureProj", "textureLod", "texelFetch",
|
||||||
|
"textureProjLod", "textureGrad", "textureProjGrad", "textureGather",
|
||||||
|
"textureQueryLod", "textureQueryLevels",
|
||||||
|
"dFdx", "dFdxCoarse", "dFdxFine", "dFdy", "dFdyCoarse", "dFdyFine",
|
||||||
|
"fwidth", "fwidthCoarse", "fwidthFine"
|
||||||
|
]
|
||||||
|
const gdshader_sub_functions = [
|
||||||
|
"length", "fma",
|
||||||
|
"packHalf2x16", "packUnorm2x16", "packSnorm2x16", "packUnorm4x8", "packSnorm4x8",
|
||||||
|
"unpackHalf2x16", "unpackUnorm2x16", "unpackSnorm2x16", "unpackUnorm4x8", "unpackSnorm4x8",
|
||||||
|
"bitfieldExtract", "bitfieldInsert", "bitfieldReverse", "bitCount",
|
||||||
|
"findLSB", "findMSB",
|
||||||
|
"umulExtended", "imulExtended",
|
||||||
|
"uaddCarry", "usubBorrow",
|
||||||
|
"ldexp", "frexp"
|
||||||
|
]
|
||||||
const gdshader_builtins = [
|
const gdshader_builtins = [
|
||||||
"TIME", "PI", "TAU", "E",
|
"TIME", "PI", "TAU", "E",
|
||||||
"MODEL_MATRIX",
|
|
||||||
"CANVAS_MATRIX",
|
|
||||||
"SCREEN_MATRIX",
|
|
||||||
"INSTANCE_ID",
|
|
||||||
"INSTANCE_CUSTOM",
|
|
||||||
"AT_LIGHT_PASS",
|
|
||||||
"TEXTURE_PIXEL_SIZE",
|
|
||||||
"VERTEX",
|
"VERTEX",
|
||||||
"VERTEX_ID",
|
|
||||||
"UV",
|
"UV",
|
||||||
"COLOR",
|
"COLOR",
|
||||||
"POINT_SIZE",
|
"POINT_SIZE",
|
||||||
"FRAGCOORD",
|
"MODEL_MATRIX", "CANVAS_MATRIX", "SCREEN_MATRIX",
|
||||||
"SCREEN_PIXEL_SIZE",
|
"INSTANCE_CUSTOM", "INSTANCE_ID",
|
||||||
"POINT_COORD",
|
"VERTEX_ID",
|
||||||
"TEXTURE",
|
"AT_LIGHT_PASS",
|
||||||
"TEXTURE_PIXEL_SIZE",
|
"TEXTURE_PIXEL_SIZE",
|
||||||
"SPECULAR_SHININESS_TEXTURE",
|
"CUSTOM0", "CUSTOM1",
|
||||||
"SPECULAR_SHININESS",
|
"SHADOW_VERTEX", "LIGHT_VERTEX",
|
||||||
"UV",
|
"FRAGCOORD",
|
||||||
"SCREEN_UV",
|
"NORMAL", "NORMAL_MAP", "NORMAL_MAP_DEPTH",
|
||||||
"SCREEN_TEXTURE",
|
"TEXTURE", "NORMAL_TEXTURE",
|
||||||
"NORMAL",
|
"SPECULAR_SHININESS_TEXTURE", "SPECULAR_SHININESS",
|
||||||
"NORMAL_TEXTURE",
|
"SCREEN_UV", "SCREEN_PIXEL_SIZE",
|
||||||
"NORMAL_MAP",
|
"POINT_COORD",
|
||||||
"NORMAL_MAP_DEPTH",
|
"LIGHT_COLOR", "LIGHT_POSITION", "LIGHT_DIRECTION",
|
||||||
"SHADOW_VERTEX",
|
"LIGHT_ENERGY", "LIGHT_IS_DIRECTIONAL", "LIGHT",
|
||||||
"LIGHT_VERTEX"
|
"SHADOW_MODULATE"
|
||||||
]
|
]
|
||||||
|
#
|
||||||
const gdshader_flow_control = [
|
# configure Highlighter
|
||||||
"if", "else",
|
#
|
||||||
"for",
|
|
||||||
"do", "while",
|
|
||||||
"switch", "case",
|
|
||||||
"break",
|
|
||||||
"return"
|
|
||||||
]
|
|
||||||
|
|
||||||
class ShaderSyntaxHighlighter extends CodeHighlighter:
|
class ShaderSyntaxHighlighter extends CodeHighlighter:
|
||||||
func _init():
|
func _init():
|
||||||
add_color_region("//", "", Color.WEB_GRAY, true)
|
add_color_region("//", "", Color.WEB_GRAY, true)
|
||||||
add_color_region("/*", "*/", Color.WEB_GRAY, false)
|
add_color_region("/*", "*/", Color.WEB_GRAY, false)
|
||||||
function_color = Color.INDIAN_RED
|
function_color = Color.INDIAN_RED
|
||||||
keyword_colors = {
|
for k in gdshader_boolean_values:
|
||||||
"shader_type": Color.ORCHID
|
keyword_colors[k] = Color.INDIAN_RED
|
||||||
}
|
for k in ( gdshader_datatypes
|
||||||
for dt in gdshader_datatypes:
|
+ gdshader_hints
|
||||||
keyword_colors[dt] = Color.INDIAN_RED
|
+ gdshader_sampler_hints
|
||||||
for bi in gdshader_builtins:
|
+ gdshader_global_space_keywords
|
||||||
keyword_colors[bi] = Color.DARK_TURQUOISE
|
+ gdshader_function_specifier_keywords
|
||||||
for fc in gdshader_flow_control:
|
+ gdshader_precision_modifiers
|
||||||
keyword_colors[fc] = Color.CORAL
|
+ gdshader_uniform_qualifiers):
|
||||||
|
keyword_colors[k] = Color.ORCHID;
|
||||||
|
for k in gdshader_block_keywords:
|
||||||
|
keyword_colors[k] = Color.CORAL
|
||||||
|
for k in gdshader_builtins:
|
||||||
|
keyword_colors[k] = Color.DARK_TURQUOISE
|
||||||
member_variable_color = Color.LIGHT_BLUE
|
member_variable_color = Color.LIGHT_BLUE
|
||||||
number_color = Color.AQUA
|
number_color = Color.AQUA
|
||||||
symbol_color = Color.GRAY
|
symbol_color = Color.GRAY
|
||||||
|
|
||||||
func _on_code_edit_code_completion_requested():
|
|
||||||
for dt in gdshader_datatypes:
|
|
||||||
code_editor.code_completion_prefixes.append(dt)
|
|
||||||
code_editor.add_code_completion_option(CodeEdit.KIND_CLASS, dt, dt, Color.INDIAN_RED)
|
|
||||||
for bi in gdshader_builtins:
|
|
||||||
code_editor.code_completion_prefixes.append(bi)
|
|
||||||
code_editor.add_code_completion_option(CodeEdit.KIND_VARIABLE, bi, bi, Color.DARK_TURQUOISE)
|
|
||||||
for fc in gdshader_flow_control:
|
|
||||||
code_editor.code_completion_prefixes.append(fc)
|
|
||||||
code_editor.add_code_completion_option(CodeEdit.KIND_PLAIN_TEXT, fc, fc, Color.DARK_TURQUOISE)
|
|
||||||
code_editor.update_code_completion_options(true)
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
# and code completion
|
||||||
|
#
|
||||||
|
func _on_code_edit_code_completion_requested():
|
||||||
|
for k in gdshader_boolean_values:
|
||||||
|
code_editor.code_completion_prefixes.append(k)
|
||||||
|
code_editor.add_code_completion_option(CodeEdit.KIND_PLAIN_TEXT, k, k, Color.INDIAN_RED)
|
||||||
|
for k in ( gdshader_datatypes
|
||||||
|
+ gdshader_hints
|
||||||
|
+ gdshader_sampler_hints
|
||||||
|
+ gdshader_global_space_keywords
|
||||||
|
+ gdshader_function_specifier_keywords
|
||||||
|
+ gdshader_precision_modifiers
|
||||||
|
+ gdshader_uniform_qualifiers):
|
||||||
|
code_editor.code_completion_prefixes.append(k)
|
||||||
|
code_editor.add_code_completion_option(CodeEdit.KIND_CLASS, k, k, Color.ORCHID)
|
||||||
|
for k in gdshader_block_keywords:
|
||||||
|
code_editor.code_completion_prefixes.append(k)
|
||||||
|
code_editor.add_code_completion_option(CodeEdit.KIND_PLAIN_TEXT, k, k, Color.CORAL)
|
||||||
|
for k in gdshader_builtins:
|
||||||
|
code_editor.code_completion_prefixes.append(k)
|
||||||
|
code_editor.add_code_completion_option(CodeEdit.KIND_CONSTANT, k, k, Color.DARK_TURQUOISE)
|
||||||
|
for k in gdshader_builtin_functions + gdshader_sub_functions:
|
||||||
|
code_editor.code_completion_prefixes.append(k)
|
||||||
|
code_editor.add_code_completion_option(CodeEdit.KIND_FUNCTION, k, k+"(", Color.INDIAN_RED)
|
||||||
|
code_editor.update_code_completion_options(true)
|
||||||
|
#
|
||||||
|
# # # # # # # # # # # #
|
||||||
|
|
||||||
func _camera_freeze():
|
func _camera_freeze():
|
||||||
Globals.camera_freeze = true
|
Globals.camera_freeze = true
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue