generateShader function

Future<void> generateShader(
  1. Future<String> shaderContent(
    1. String
    ),
  2. List<String> shaders,
  3. Directory targetFolder,
  4. String? customSourcesFolder,
)

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'),
  );
}