processing/processing4

Support for #include in PShader (Enhancement)

Open

#572 ouverte le 7 oct. 2022

Voir sur GitHub
 (3 commentaires) (0 réactions) (0 assignés)Java (176 forks)auto 404
corehelp wantedopengl

Métriques du dépôt

Stars
 (439 stars)
Métriques de merge PR
 (Métriques PR en attente)

Description

Created by: patriciogonzalezvivo

Although #include routines are defined by Khronos as an extension they are left for the environment/framework running the GL driver to implement. The reason for that is the required access to file system. Implementing #include routines are fairly straight forward with a couple of gotchas to avoid, like: relative paths and infinite recursions. Most serious CG engines support them because their advantages on modularity, reusability and clearer code. For Processing this also could mean support for LYGIA a rich shader library pack with useful resources for creative coders and artist. I made a simple implementations of a #include parser in this repository together with some examples on how it can be use.

void loadSource(String current_folder, String filename, ArrayList<String> source) {
  println("search for", filename, "in", current_folder);
  File file = new File(current_folder,filename);
  String url = file.getPath().substring(1);
  println("open", url);
  String[] lines = loadStrings(url); 
  
  for (int i = 0; i < lines.length; i++) {
    String line = lines[i];
    String line_trim = line.trim();
    if (line_trim.startsWith("#include")){
      String include_file = line_trim.substring("#include".length()).replace("\"", "").trim();
      File f = new File(current_folder,include_file);
      loadSource(f.getParent(), f.getName(), source);
    } else {
      source.add(line + System.getProperty("line.separator") );
    }
  }
}

Adding this feature to createShader() to parse both vert and frag shaders shouldn't be hard and potentially bring numerous advantages.

cc @codeanticode @SableRaf @cacheflowe

Guide contributeur