Fix Includes/Imports in Shader

This commit is contained in:
Ralty
2026-03-30 06:57:56 +07:00
parent 2ec0500cd5
commit d7c9f2595a
+20 -29
View File
@@ -201,42 +201,33 @@ class FunkinShaderSourceAssembler extends FlxRuntimeShader.FlxShaderSourceAssemb
super(funkinParent = parent);
}
override function assembleSource(source:String, ?pragmas:Map<String, String>, ?extensions:Map<String, String>,
?version:String, isVertex:Bool, useCompatibility:Bool = true, precisionHint:ShaderPrecision = FULL):String
override function __appendIncludes(source:String, isVertex:Bool, ?includedKeys:Map<String, Bool>):String
{
if (version == null) version = Flags.DEFAULT_GLSL_VERSION;
if (includedKeys == null) includedKeys = [];
if (source == null) {
// There's nothing to assemble with, but just return it with a prefix instead anyway.
var dataVersion = GLSLSourceAssembler.__getVersion(version);
return __appendPrefix(null, dataVersion.versionNumber, dataVersion.versionProfile, extensions, isVertex, precisionHint);
}
source = GLSLSourceAssembler.__getIncludeFinder().map(source, (regex:EReg) ->
{
var key = regex.matched(1);
if (includedKeys.get(key)) return '/*Recursive include $key*/\n';
if (pragmas != null) {
source = GLSLSourceAssembler.__getPragmaFinder().map(source, (glPragmaFinder:EReg) -> {
var pragma = glPragmaFinder.matched(1);
return pragmas.exists(pragma) ? '/*pragma $pragma*/\n' + pragmas.get(pragma) + '\n' : 'pragma $pragma';
});
}
var include = __getIncludeSource(key, isVertex);
if (include == null) return '/*Unknown include $key*/\n';
function includeERegCallback(finder:EReg) {
var include = finder.matched(1);
var included = __getIncludeSource(include, isVertex);
return included != null ? '/*include $include*/\n' + included : '/*Unknown include $include*/\n';
}
includedKeys.set(key, true);
return '/*include $key*/\n' + __appendIncludes(include, isVertex, includedKeys);
});
source = GLSLSourceAssembler.__getIncludeFinder().map(source, includeERegCallback);
source = __getImportFinder().map(source, includeERegCallback);
return __getImportFinder().map(source, (regex:EReg) ->
{
var key = regex.matched(1);
if (includedKeys.get(key)) return '/*Recursive import $key*/\n';
var data = GLSLSourceAssembler.__getSource(source, version);
extensions = __buildExtensions(GLSLSourceAssembler.__getExtensions(source, extensions == null ? new Map() : extensions.copy()),
data.versionNumber, data.versionProfile, isVertex);
var include = __getIncludeSource(key, isVertex);
if (include == null) return '/*Unknown import $key*/\n';
if (useCompatibility) {
data.source = __applyCompatibility(data.source, data.versionNumber, data.versionProfile, isVertex);
}
return __appendPrefix(data.source, data.versionNumber, data.versionProfile, extensions, isVertex, precisionHint);
includedKeys.set(key, true);
return '/*import $key*/\n' + __appendIncludes(include, isVertex, includedKeys);
});
}
override function __getIncludeSource(include:String, fromVertex:Bool):Null<String> {