processing/processing4

Support for #include in PShader (Enhancement)

Open

#572 aperta il 7 ott 2022

Vedi su GitHub
 (3 commenti) (0 reazioni) (0 assegnatari)Java (176 fork)auto 404
corehelp wantedopengl

Metriche repository

Star
 (439 star)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

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

Guida contributor