Bonjours à tous !
Je vous sollicite aujourd'hui car je recherche activement une solution. J'aimerais que dans la définition d'une structure, ou d'une classe, je puisse définir explicitement l'adresse relative d'un attribut membre dans un objet. Bien entendu, aillant cherché activement, je n'ai pas réussi à trouver mon bonheur, et m'en remet donc à vous et vos connaissances. (Sinon je ne posterais pas )
Permettez moi de vous expliquer quel en ai le but :
Je dispose de structures pour faire du calcul vectoriel en 2, 3 et 4 dimension.
Or je suis également developeur OpenGL, donc GLSL pour ses shaders, et GLSL propose quelque chose que j'apprécies beaucoup :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 struct vec2 { float x; float y; }; struct vec3 { float x; float y; float z; }; struct vec4 { float x; float y; float z; float w; };
J'aimerais rendre cela possible en C/C++, et jusque là je m'en sort :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5// code GLSL vec4 a; vec2 b = a.xy; vec2 c = a.yz; a.zw += b + c.yx;
Mais j'aimerais pouvoir fair disparaitre les parenthèse pour obtenir une compatibilité entre le code C++ et le code GLSL car, xy et ses copains sont pour le moment des méthodes inline. Et pour cela, j'avais pensez à définir d'avantages de variables membres comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // code C++ actuel vec4 a; vec2 b = a.xy ( ); vec2 c = a.yz ( ); a.zw ( ) += b + c.yx ( );
Je n'ai pas mis toutes les combinaisons possible ici par lisibilité.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // représentation mémoire de vec4 0x0...00 | float x | vec2 xy | | vec3 xyz | 0x0...04 | float y | vec2 xy | vec2 yz | vec3 xyz | 0x0...08 | float z | vec2 zw | vec2 yz | vec3 xyz | 0x0...0C | float w | vec2 zw | | |
Si vous avez une solution à me proposer, pour ce résultat je suit preneur !
Je vous remercie de votre lecture, ainsi que de vos réponses éventuelles.
Très cordialement.
Partager