/* ============================================================================ * Freetype GL - A C OpenGL Freetype engine * Platform: Any * WWW: http://code.google.com/p/freetype-gl/ * ---------------------------------------------------------------------------- * Copyright 2011,2012 Nicolas P. Rougier. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY NICOLAS P. ROUGIER ''AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO * EVENT SHALL NICOLAS P. ROUGIER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation are * those of the authors and should not be interpreted as representing official * policies, either expressed or implied, of Nicolas P. Rougier. * ============================================================================ */ #ifndef __VEC234_H__ #define __VEC234_H__ #ifdef __cplusplus extern "C" { #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, r or red * - Second component: y, g or green * - Third component: z, b, blue or width * - Fourth component: w, a, alpha or height */ typedef union { float data[4]; /**< All compoments at once */ struct { float x; /**< Alias for first component */ float y; /**< Alias fo second component */ float z; /**< Alias fo third component */ float w; /**< Alias fo fourth component */ }; struct { float x_; /**< Alias for first component */ float y_; /**< Alias fo second component */ float width; /**< Alias fo third component */ float height; /**< Alias fo fourth component */ }; struct { float r; /**< Alias for first component */ float g; /**< Alias fo second component */ float b; /**< Alias fo third component */ float a; /**< Alias fo fourth component */ }; struct { float red; /**< Alias for first component */ float green; /**< Alias fo second component */ float blue; /**< Alias fo third component */ float alpha; /**< Alias fo 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__ */