class CrShader::Validator::Rules

Defined in:

crshader/validator/rules.cr

Constant Summary

ALL_RENDER_MODES = VALID_RENDER_MODES.values.reduce(Set(String).new) do |acc, set| acc | set end

All known render modes across all types

STAGE_READABLE_ONLY = {"DIFFUSE_LIGHT" => Set {"light"}, "SPECULAR_LIGHT" => Set {"light"}, "LIGHT" => Set {"light"}, "LIGHT_COLOR" => Set {"light"}, "ATTENUATION" => Set {"light"}, "EYEDIR" => Set {"sky"}, "SKY_COORDS" => Set {"sky"}, "SDF" => Set {"fog"}, "SDF_NORMAL" => Set {"fog"}}

Built-in variables that can only be READ in specific stages

STAGE_WRITABLE_BUILTINS = {"VERTEX" => Set {"vertex"}, "POSITION" => Set {"vertex", "sky"}, "NORMAL" => Set {"vertex", "fragment"}, "TANGENT" => Set {"vertex", "fragment"}, "BINORMAL" => Set {"vertex", "fragment"}, "UV" => Set {"vertex"}, "UV2" => Set {"vertex"}, "POINT_SIZE" => Set {"vertex"}, "COLOR" => Set {"vertex", "fragment", "light", "start", "process", "collide", "sky"}, "ALBEDO" => Set {"fragment"}, "ALPHA" => Set {"fragment"}, "ALPHA_SCISSOR_THRESHOLD" => Set {"fragment"}, "ALPHA_HASH_SCALE" => Set {"fragment"}, "ROUGHNESS" => Set {"fragment"}, "METALLIC" => Set {"fragment"}, "SPECULAR" => Set {"fragment"}, "EMISSION" => Set {"fragment"}, "NORMAL_MAP" => Set {"fragment"}, "NORMAL_MAP_DEPTH" => Set {"fragment"}, "RIM" => Set {"fragment"}, "RIM_TINT" => Set {"fragment"}, "CLEARCOAT" => Set {"fragment"}, "CLEARCOAT_ROUGHNESS" => Set {"fragment"}, "ANISOTROPY" => Set {"fragment"}, "ANISOTROPY_FLOW" => Set {"fragment"}, "AO" => Set {"fragment"}, "AO_LIGHT_AFFECT" => Set {"fragment"}, "SSS_STRENGTH" => Set {"fragment"}, "TRANSMISSION" => Set {"fragment"}, "BACKLIGHT" => Set {"fragment"}, "DEPTH" => Set {"fragment"}, "DIFFUSE_LIGHT" => Set {"light"}, "SPECULAR_LIGHT" => Set {"light"}, "SHADOW_MODULATE" => Set {"light"}, "LIGHT_VERTEX" => Set {"light"}, "SHADOW_VERTEX" => Set {"light"}, "DENSITY" => Set {"fog"}, "FOG_COLOR" => Set {"fog"}, "TRANSFORM" => Set {"start", "process", "collide"}, "VELOCITY" => Set {"start", "process", "collide"}, "CUSTOM" => Set {"start", "process", "collide"}, "ACTIVE" => Set {"start", "process", "collide"}}

Built-in variables that are strictly writable ONLY in specific stages Format: variable_name => Allowed stages

VALID_RENDER_MODES = {ShaderType::Spatial => Set {"blend_mix", "blend_add", "blend_sub", "blend_mul", "depth_draw_opaque", "depth_draw_always", "depth_draw_never", "depth_prepass_alpha", "depth_test_disabled", "cull_back", "cull_front", "cull_disabled", "unshaded", "wireframe", "diffuse_burley", "diffuse_lambert", "diffuse_lambert_wrap", "diffuse_toon", "specular_schlick_ggx", "specular_toon", "specular_disabled", "skip_vertex_transform", "world_vertex_coords", "ensure_correct_normals", "shadows_disabled", "ambient_light_disabled", "fog_disabled", "particle_trails", "alpha_to_coverage", "alpha_to_coverage_and_one", "shadow_to_opacity", "vertex_lighting"}, ShaderType::CanvasItem => Set {"blend_mix", "blend_add", "blend_sub", "blend_mul", "blend_premult_alpha", "blend_disabled", "unshaded", "light_only", "skip_vertex_transform", "world_vertex_coords"}, ShaderType::Particles => Set {"keep_data", "disable_force", "disable_velocity", "collision_use_scale"}, ShaderType::Sky => Set {"use_half_res_pass", "use_quarter_res_pass", "disable_fog"}, ShaderType::Fog => Set {"disabled"}, ShaderType::Compute => Set(String).new}

Allowed render modes per ShaderType in Godot 4.x

Class Method Summary

Class Method Detail

def self.find_closest_match(target : String, candidates : Enumerable(String), max_distance : Int32 = 3) : String | Nil #

Finds the closest matching string from candidates, or nil if distance > max_distance


def self.levenshtein_distance(s1 : String, s2 : String) : Int32 #

Levenshtein distance calculation for fuzzy suggestions