AcademySoftwareFoundation / AcademySoftwareFoundation/OpenColorIO
OSL secondary functions can cause name clashes
- Lingua principale
- C++
- Stelle
- 2.1k
- Fork
- 505
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
When generating OSL some secondary functions are introduced which don't seem to be considered when setting the option to try and generate unique function names. The following is an example generated:
```c++
/* All the includes */
#include "vector4.h"
#include "color4.h"
/* All the generic helper methods */
vector4 __operator__mul__(matrix m, vector4 v)
{
return vector4(v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3],
v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3],
v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2] + v.w * m[2][3],
v.x * m[3][0] + v.y * m[3][1] + v.z * m[3][2] + v.w * m[3][3]);
}
vector4 __operator__mul__(color4 c, vector4 v)
{
return vector4(c.rgb.r, c.rgb.g, c.rgb.b, c.a) * v;
}
vector4 __operator__mul__(vector4 v, color4 c)
{
return v * vector4(c.rgb.r, c.rgb.g, c.rgb.b, c.a);
}
vector4 __operator__sub__(color4 c, vector4 v)
{
return vector4(c.rgb.r, c.rgb.g, c.rgb.b, c.a) - v;
}
vector4 __operator__add__(vector4 v, color4 c)
{
return v + vector4(c.rgb.r, c.rgb.g, c.rgb.b, c.a);
}
vector4 __operator__add__(color4 c, vector4 v)
{
return vector4(c.rgb.r, c.rgb.g, c.rgb.b, c.a) + v;
}
vector4 pow(color4 c, vector4 v)
{
return pow(vector4(c.rgb.r, c.rgb.g, c.rgb.b, c.a), v);
}
vector4 max(vector4 v, color4 c)
{
return max(v, vector4(c.rgb.r, c.rgb.g, c.rgb.b, c.a));
}
/* The shader implementation */
shader OSL_mx_acescg_to_lin_rec709_color4(color4 inColor = {color(0), 1}, output color4 outColor = {color(0), 1})
{
// Declaration of the OCIO shader function
color4 mx_acescg_to_lin_rec709_color4(color4 inPixel)
{
color4 outColor = inPixel;
// Add Matrix processing
{
vector4 res = vector4(outColor.rgb.r, outColor.rgb.g, outColor.rgb.b, outColor.a);
vector4 tmp = res;
res = matrix(1.7050509926579815, -0.62179212065700562, -0.0832588720009797, 0., -0.1302564175070435, 1.1408047365754048, -0.010548319068357653, 0., -0.024003356804618042, -0.1289689760649709, 1.1529723328695858, 0., 0., 0., 0., 1.) * tmp;
outColor.rgb = vector(res.x, res.y, res.z);
outColor.a = res.w;
}
return outColor;
}
outColor = mx_acescg_to_lin_rec709_color4(inColor);
}
```
Some of the shader functions have been overridden but functions with generic names like `max()`. `pow()` and names like `__operator__add__` as well as include declarations means there can be name clashes and multiple identical includes when trying to insert more than one transform function into a larger OSL shader.
It is possible to post rename them, but wondering if there is a way to handle this so it's either reusable (allow for a seperate "common" source code" API access, or make the renaming logic also rename these functions.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia dal percorso di generazione OSL e traccia il modo in cui vengono raccolte e rinominate le funzioni secondarie, i nomi generici e le dichiarazioni include. Confronta l'output di più funzioni di trasformazione per identificare collisioni e include duplicati. Il lavoro è completato quando le funzioni e gli include generati possono essere combinati senza conflitti, con test o un meccanismo di sorgente riutilizzabile documentato che copra questo comportamento.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- cpp
- Ambito
- computer-graphics
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100