processing / processing/processing4
Support for #include in PShader (Enhancement)
Personne n'a encore pris cette issue.
- 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
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- 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