/* Freetype GL - A C OpenGL Freetype engine * * Distributed under the OSI-approved BSD 2-Clause License. See accompanying * file `LICENSE` for more details. */ #ifndef __VEC234_H__ #define __VEC234_H__ #ifdef __cplusplus extern "C" { namespace ftgl { #endif /** * Tuple of 4 ints. * * Each field can be addressed using several aliases: * - First component: x, r, red or vstart * - Second component: y, g, green or vcount * - Third component: z, b, blue, width or istart * - Fourth component: w, a, alpha, height or icount * */ typedef union { int data[4]; /**< All compoments at once */ struct { int x; /**< Alias for first component */ int y; /**< Alias for second component */ int z; /**< Alias for third component */ int w; /**< Alias for fourht component */ }; struct { int x_; /**< Alias for first component */ int y_; /**< Alias for second component */ int width; /**< Alias for third component */ int height; /**< Alias for fourth component */ }; struct { int r; /**< Alias for first component */ int g; /**< Alias for second component */ int b; /**< Alias for third component */ int a; /**< Alias for fourth component */ }; struct { int red; /**< Alias for first component */ int green; /**< Alias for second component */ int blue; /**< Alias for third component */ int alpha; /**< Alias for fourth component */ }; struct { int vstart; /**< Alias for first component */ int vcount; /**< Alias for second component */ int istart; /**< Alias for third component */ int icount; /**< Alias for fourth component */ }; } ivec4; /** * Tuple of 3 ints. * * Each field can be addressed using several aliases: * - First component: x, r or red * - Second component: y, g or green * - Third component: z, b or blue * */ typedef union { int data[3]; /**< All compoments at once */ struct { int x; /**< Alias for first component */ int y; /**< Alias for second component */ int z; /**< Alias for third component */ }; struct { int r; /**< Alias for first component */ int g; /**< Alias for second component */ int b; /**< Alias for third component */ }; struct { int red; /**< Alias for first component */ int green; /**< Alias for second component */ int blue; /**< Alias for third component */ }; } ivec3; /** * Tuple of 2 ints. * * Each field can be addressed using several aliases: * - First component: x, s or start * - Second component: y, t or end * */ typedef union { int data[2]; /**< All compoments at once */ struct { int x; /**< Alias for first component */ int y; /**< Alias for second component */ }; struct { int s; /**< Alias for first component */ int t; /**< Alias for second component */ }; struct { int start; /**< Alias for first component */ int end; /**< Alias for second component */ }; } ivec2; /** * Tuple of 4 floats. * * Each field can be addressed using several aliases: * - First component: x, left, r or red * - Second component: y, top, g or green * - Third component: z, width, b or blue * - Fourth component: w, height, a or alpha */ typedef union { float data[4]; /**< All compoments at once */ struct { float x; /**< Alias for first component */ float y; /**< Alias for second component */ float z; /**< Alias for third component */ float w; /**< Alias for fourth component */ }; struct { float left; /**< Alias for first component */ float top; /**< Alias for second component */ float width; /**< Alias for third component */ float height; /**< Alias for fourth component */ }; struct { float r; /**< Alias for first component */ float g; /**< Alias for second component */ float b; /**< Alias for third component */ float a; /**< Alias for fourth component */ }; struct { float red; /**< Alias for first component */ float green; /**< Alias for second component */ float blue; /**< Alias for third component */ float alpha; /**< Alias for fourth component */ }; } vec4; /** * Tuple of 3 floats * * Each field can be addressed using several aliases: * - First component: x, r or red * - Second component: y, g or green * - Third component: z, b or blue */ typedef union { float data[3]; /**< All compoments at once */ struct { float x; /**< Alias for first component */ float y; /**< Alias fo second component */ float z; /**< Alias fo third component */ }; struct { float r; /**< Alias for first component */ float g; /**< Alias fo second component */ float b; /**< Alias fo third component */ }; struct { float red; /**< Alias for first component */ float green; /**< Alias fo second component */ float blue; /**< Alias fo third component */ }; } vec3; /** * Tuple of 2 floats * * Each field can be addressed using several aliases: * - First component: x or s * - Second component: y or t */ typedef union { float data[2]; /**< All components at once */ struct { float x; /**< Alias for first component */ float y; /**< Alias for second component */ }; struct { float s; /**< Alias for first component */ float t; /**< Alias for second component */ }; } vec2; #ifdef __cplusplus } } #endif #endif /* __VEC234_H__ */