generateShader function
Implementation
Future<void> generateShader(
Future<String> Function(String) shaderContent,
List<String> shaders,
Directory targetFolder,
String? customSourcesFolder,
) async {
List<String> finalShader = [
'#include <flutter/runtime_effect.glsl>',
'precision mediump float;',
'\n',
'out vec4 fragColor;',
];
final content = <ShaderBody>[];
for (String shader in shaders) {
try {
content.add(ShaderBody.fromSource(await shaderContent(shader)));
} catch (e, t) {
stderr.writeln(e);
stderr.writeln(t);
continue;
}
}
finalShader.add('\n');
finalShader.addAll(content.samplers);
finalShader.add('\n');
finalShader.addAll(content.inputs);
finalShader.add('\n');
finalShader.addAll(content.others);
finalShader.add('\n');
finalShader.addAll(content.process);
finalShader.add('\n');
finalShader.addAll(content.main);
if (await targetFolder.exists() == false) {
await targetFolder.create(recursive: true);
}
final outputFile =
File('${targetFolder.absolute.path}/${shaders.join('_')}.frag');
outputFile.writeAsStringSync(
finalShader.join('\n').replaceAll(RegExp('\n{3,}'), '\n\n'),
);
}