///|
fn wgsl_module_path_from_rel_path(rel_path : String) -> String? {
let normalized_rel = normalize_shader_rel_path(rel_path)
if normalized_rel == "" || !normalized_rel.has_suffix(".wgsl") {
return None
}
let without_extension = normalized_rel[:normalized_rel.length() - 5].to_owned()
let trimmed_prefix = if without_extension.has_prefix("shaders/") {
without_extension[8:without_extension.length()].to_owned()
} else {
without_extension
}
let segments : Array[String] = []
for segment in trimmed_prefix.split("/") {
let text = segment.to_owned().trim().to_owned()
if text != "" {
segments.push(text)
}
}
if segments.length() == 0 {
None
} else {
Some(segments.join("::"))
}
}
///|
fn wgsl_module_path_to_rel_path(module_path : String) -> String {
let mut rel = "shaders/"
let mut first = true
for seg in module_path.split("::") {
let text = seg.to_owned()
if text == "" {
continue
}
if first {
first = false
} else {
rel = "\{rel}/"
}
rel = "\{rel}\{text}"
}
"\{rel}.wgsl"
}
///|
fn wgsl_module_path_to_rel_path_namespace(module_path : String) -> String {
let segments : Array[String] = []
for seg in module_path.split("::") {
let text = seg.to_owned().trim().to_owned()
if text != "" {
segments.push(text)
}
}
if segments.length() == 0 {
return ""
}
let mut rel = "shaders/\{segments[0]}"
for i in 1.. String {
wgsl_module_path_to_rel_path_namespace(module_path)
}