Bonjour,
Comme d'habitude, je viens ici pour poser une question un peu tordue.
En gros, en OpenGL, on définit un certain nombre de lumières activables en passant l'appel
Où X est le numéro de la lumière. De base, il y en a jusqu'à 8, mais ça peut aller au-delà. Cette limitation est fixée par la constante GL_MAX_LIGHTS en fonction du système sur lequel OpenGL tourne (software & hardware je suppose).
Maintenant, ce que je voudrais faire, c'est quelque chose comme ça :
1 2 3 4
|
#define ENABLE_LIGHT(i) glEnable(i);
#define ENABLE_LIGHTS for(int i = 0; i < GL_MAX_LIGHTS; ++i) \
ENABLE_LIGHT(GL_LIGHT ## #i); |
Ce qui dans ma tête aurait pour sortie si on a GL_MAX_LIGHTS = 8 :
1 2 3 4 5
|
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
...
glEnable(GL_LIGHT7); |
Seulement, j'ai une sortie d'erreur du compilateur :
1 2 3
|
error: pasting "GL_LIGHT" and "#" does not give a valid preprocessing token
error: stray '#' in program |
J'ai essayé de multiples combinaisons, mais pour le coup, ça fonctionne vraiment pas, et ça m'embête bien.
Je me doutais que sous cette forme c'était pas possible, mais je suis certain (pour avoir vu un code dans le thème) que dans l'esprit c'est faisable.
J'ai cherché en vain sur le net, je ne tombe que sur des trucs bien moches avec des appels hideux du genre :
LOOP8(x) glxps(8); LOOP7(x)
Bon, après, ce que je me dis, c'est que vu que GL_MAX_LIGHTS sera déterminé par la machine où je compilerai le programme, ça signifie qu'il faudra que je compile obligatoirement ces macros à chaque fois que je veux installer mon application quelque part. Mais c'est pas trop grave ça.
Bref, est-ce que l'un de vous aurait une idée derrière la tête pour faire ce genre de cochonceté ?
Partager