nuclear@0: #ifndef SANEGL_ATTR_H_ nuclear@0: #define SANEGL_ATTR_H_ nuclear@0: nuclear@0: #ifndef SANEGL_IMPL_ nuclear@0: /* in the header file just expand to the prototypes */ nuclear@0: #define GLATTR1(name, type, suffix, conv) \ nuclear@0: void gl##name##1##suffix(GL##type x); nuclear@0: nuclear@0: #define GLATTR2(name, type, suffix, conv) \ nuclear@0: void gl##name##2##suffix(GL##type x, GL##type y); nuclear@0: nuclear@0: #define GLATTR3(name, type, suffix, conv) \ nuclear@0: void gl##name##3##suffix(GL##type x, GL##type y, GL##type z); nuclear@0: nuclear@0: #define GLATTR4(name, type, suffix, conv) \ nuclear@0: void gl##name##3##suffix(GL##type x, GL##type y, GL##type z, GL##type w); nuclear@0: nuclear@0: #define GLATTR1V(name, type, suffix, conv) \ nuclear@0: void gl##name##1##suffix##v(const GL##type *p); nuclear@0: nuclear@0: #define GLATTR2V(name, type, suffix, conv) \ nuclear@0: void gl##name##2##suffix##v(const GL##type *p); nuclear@0: nuclear@0: #define GLATTR3V(name, type, suffix, conv) \ nuclear@0: void gl##name##3##suffix##v(const GL##type *p); nuclear@0: nuclear@0: #define GLATTR4V(name, type, suffix, conv) \ nuclear@0: void gl##name##4##suffix##v(const GL##type *p); nuclear@0: #else nuclear@0: /* this full expansion will be performed in the implementation (sanegl.c) */ nuclear@0: #define GLATTR1(name, type, suffix, conv) \ nuclear@0: void gl##name##1##suffix(GL##type x) \ nuclear@0: { gl##name##4f(conv(x), 0, 0, 1); } nuclear@0: nuclear@0: #define GLATTR2(name, type, suffix, conv) \ nuclear@0: void gl##name##2##suffix(GL##type x, GL##type y) \ nuclear@0: { gl##name##4f(conv(x), conv(y), 0, 1); } nuclear@0: nuclear@0: #define GLATTR3(name, type, suffix, conv) \ nuclear@0: void gl##name##3##suffix(GL##type x, GL##type y, GL##type z) \ nuclear@0: { gl##name##4f(conv(x), conv(y), conv(z), 1); } nuclear@0: nuclear@0: #define GLATTR4(name, type, suffix, conv) \ nuclear@0: void gl##name##3##suffix(GL##type x, GL##type y, GL##type z, GL##type w) \ nuclear@0: { gl##name##4f(conv(x), conv(y), conv(z), conv(w)); } nuclear@0: nuclear@0: #define GLATTR1V(name, type, suffix, conv) \ nuclear@0: void gl##name##1##suffix##v(const GL##type *p) \ nuclear@0: { gl##name##4f(conv(*p), 0, 0, 1); } nuclear@0: nuclear@0: #define GLATTR2V(name, type, suffix, conv) \ nuclear@0: void gl##name##2##suffix##v(const GL##type *p) \ nuclear@0: { gl##name##4f(conv(p[0]), conv(p[1]), 0, 1); } nuclear@0: nuclear@0: #define GLATTR3V(name, type, suffix, conv) \ nuclear@0: void gl##name##3##suffix##v(const GL##type *p) \ nuclear@0: { gl##name##4f(conv(p[0]), conv(p[1]), conv(p[2]), 1); } nuclear@0: nuclear@0: #define GLATTR4V(name, type, suffix, conv) \ nuclear@0: void gl##name##4##suffix##v(const GL##type *p) \ nuclear@0: { gl##name##4f(conv(p[0]), conv(p[1]), conv(p[2]), conv(p[3])); } nuclear@0: #endif nuclear@0: nuclear@0: /* n-arg functions */ nuclear@0: GLATTR2(Vertex, float, f, (float)) nuclear@0: GLATTR3(Vertex, float, f, (float)) nuclear@0: nuclear@0: GLATTR2(Vertex, double, d, (float)) nuclear@0: GLATTR3(Vertex, double, d, (float)) nuclear@0: GLATTR4(Vertex, double, d, (float)) nuclear@0: nuclear@0: GLATTR2(Vertex, int, i, (float)) nuclear@0: GLATTR3(Vertex, int, i, (float)) nuclear@0: GLATTR4(Vertex, int, i, (float)) nuclear@0: nuclear@0: GLATTR2(Vertex, short, s, (float)) nuclear@0: GLATTR3(Vertex, short, s, (float)) nuclear@0: GLATTR4(Vertex, short, s, (float)) nuclear@0: nuclear@0: GLATTR3(Color, float, f, (float)) nuclear@0: GLATTR3(Color, double, d, (float)) nuclear@0: GLATTR4(Color, double, d, (float)) nuclear@0: nuclear@0: GLATTR3(Color, byte, b, (1.0f / CHAR_MAX) * (float)) nuclear@0: GLATTR4(Color, byte, b, (1.0f / CHAR_MAX) * (float)) nuclear@0: nuclear@0: GLATTR3(Color, ubyte, ub, (1.0f / UCHAR_MAX) * (float)) nuclear@0: GLATTR4(Color, ubyte, ub, (1.0f / UCHAR_MAX) * (float)) nuclear@0: nuclear@0: GLATTR3(Color, short, s, (1.0f / SHRT_MAX) * (float)) nuclear@0: GLATTR4(Color, short, s, (1.0f / SHRT_MAX) * (float)) nuclear@0: nuclear@0: GLATTR3(Color, ushort, us, (1.0f / USHRT_MAX) * (float)) nuclear@0: GLATTR4(Color, ushort, us, (1.0f / USHRT_MAX) * (float)) nuclear@0: nuclear@0: GLATTR3(Color, int, i, (1.0f / INT_MAX) * (float)) nuclear@0: GLATTR4(Color, int, i, (1.0f / INT_MAX) * (float)) nuclear@0: nuclear@0: GLATTR3(Color, uint, ui, (1.0f / UINT_MAX) * (float)) nuclear@0: GLATTR4(Color, uint, ui, (1.0f / UINT_MAX) * (float)) nuclear@0: nuclear@0: GLATTR1(TexCoord, float, f, (float)) nuclear@0: GLATTR2(TexCoord, float, f, (float)) nuclear@0: GLATTR3(TexCoord, float, f, (float)) nuclear@0: nuclear@0: GLATTR1(TexCoord, double, d, (float)) nuclear@0: GLATTR2(TexCoord, double, d, (float)) nuclear@0: GLATTR3(TexCoord, double, d, (float)) nuclear@0: GLATTR4(TexCoord, double, d, (float)) nuclear@0: nuclear@0: GLATTR1(TexCoord, int, i, (float)) nuclear@0: GLATTR2(TexCoord, int, i, (float)) nuclear@0: GLATTR3(TexCoord, int, i, (float)) nuclear@0: GLATTR4(TexCoord, int, i, (float)) nuclear@0: nuclear@0: GLATTR1(TexCoord, short, s, (float)) nuclear@0: GLATTR2(TexCoord, short, s, (float)) nuclear@0: GLATTR3(TexCoord, short, s, (float)) nuclear@0: GLATTR4(TexCoord, short, s, (float)) nuclear@0: nuclear@0: /* vector functions */ nuclear@0: GLATTR2V(Vertex, float, f, (float)) nuclear@0: GLATTR3V(Vertex, float, f, (float)) nuclear@0: nuclear@0: GLATTR2V(Vertex, double, d, (float)) nuclear@0: GLATTR3V(Vertex, double, d, (float)) nuclear@0: GLATTR4V(Vertex, double, d, (float)) nuclear@0: nuclear@0: GLATTR2V(Vertex, int, i, (float)) nuclear@0: GLATTR3V(Vertex, int, i, (float)) nuclear@0: GLATTR4V(Vertex, int, i, (float)) nuclear@0: nuclear@0: GLATTR2V(Vertex, short, s, (float)) nuclear@0: GLATTR3V(Vertex, short, s, (float)) nuclear@0: GLATTR4V(Vertex, short, s, (float)) nuclear@0: nuclear@0: GLATTR3V(Color, float, f, (float)) nuclear@0: GLATTR3V(Color, double, d, (float)) nuclear@0: GLATTR4V(Color, double, d, (float)) nuclear@0: nuclear@0: GLATTR1V(TexCoord, float, f, (float)) nuclear@0: GLATTR2V(TexCoord, float, f, (float)) nuclear@0: GLATTR3V(TexCoord, float, f, (float)) nuclear@0: nuclear@0: GLATTR1V(TexCoord, double, d, (float)) nuclear@0: GLATTR2V(TexCoord, double, d, (float)) nuclear@0: GLATTR3V(TexCoord, double, d, (float)) nuclear@0: GLATTR4V(TexCoord, double, d, (float)) nuclear@0: nuclear@0: GLATTR1V(TexCoord, int, i, (float)) nuclear@0: GLATTR2V(TexCoord, int, i, (float)) nuclear@0: GLATTR3V(TexCoord, int, i, (float)) nuclear@0: GLATTR4V(TexCoord, int, i, (float)) nuclear@0: nuclear@0: GLATTR1V(TexCoord, short, s, (float)) nuclear@0: GLATTR2V(TexCoord, short, s, (float)) nuclear@0: GLATTR3V(TexCoord, short, s, (float)) nuclear@0: GLATTR4V(TexCoord, short, s, (float)) nuclear@0: nuclear@0: nuclear@0: #endif /* SANEGL_ATTR_H_ */