processing / processing/processing4

Support for #include in PShader (Enhancement)

Ouverte
#572 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

core help wanted opengl
Langage dominant
Java
Étoiles
494
Forks
183
Merge moyen
4 h 39 min
PR mergées (30 j)
3

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 de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par localiser createShader() et les chemins de code qui chargent les PShaders de vertex et de fragment. Lisez le include parser lié de lygia_p5_examples pour comprendre sa gestion des chemins relatifs et de la récursion, puis identifiez les tests ou exemples existants de chargement de shaders. Le travail est terminé lorsque les deux types de shaders peuvent développer des fichiers #include en toute sécurité, y compris des includes relatifs imbriqués, sans récursion infinie.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
java
Domaine
computer-graphics
Type d'issue
Fonctionnalité
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
38/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.