AcademySoftwareFoundation / AcademySoftwareFoundation/OpenColorIO

OSL secondary functions can cause name clashes

Aperta
#1,851 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Needs Discussion
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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.