diff options
Diffstat (limited to 'include/rin/float_types.h')
-rw-r--r-- | include/rin/float_types.h | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/include/rin/float_types.h b/include/rin/float_types.h new file mode 100644 index 0000000..2d99b2f --- /dev/null +++ b/include/rin/float_types.h @@ -0,0 +1,157 @@ +/* + * The Rin Library – floating point module + * + * Copyright (C) 2015 Gediminas Jakutis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; version 2.1 + * of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef LIBRIN_FLOAT_TYPES_INCLUDED +#define LIBRIN_FLOAT_TYPES_INCLUDED + +/* These vec[num] types mostly mimic the analogous types found in OpenGL + * Might get renamed to rin_vec[num] in case namespace clashes + * with other existing libraries get noticed. + * + * vecd[num] use double instead of float, but are otherwise identical to vec[num]. + */ + +struct vec2 { + union { + struct { + float x; + float y; + }; + struct { + float r; + float g; + }; + struct { + float s; + float t; + }; + }; +}; + +struct vec3 { + union { + struct { + float x; + float y; + float z; + }; + struct { + float r; + float g; + float b; + }; + struct { + float s; + float t; + float p; + }; + }; +}; + +struct vec4 { + union { + struct { + float x; + float y; + float z; + float w; + }; + struct { + float r; + float g; + float b; + float a; + }; + struct { + float s; + float t; + float p; + float q; + }; + }; +}; + +struct vec2d { + union { + struct { + double x; + double y; + }; + struct { + double r; + double g; + }; + struct { + double s; + double t; + }; + }; +}; + +struct vec3d { + union { + struct { + double x; + double y; + double z; + }; + struct { + double r; + double g; + double b; + }; + struct { + double s; + double t; + double p; + }; + }; +}; + +struct vec4d { + union { + struct { + double x; + double y; + double z; + double w; + }; + struct { + double r; + double g; + double b; + double a; + }; + struct { + double s; + double t; + double p; + double q; + }; + }; +}; + +/* A simple 3D vertex with position and normal data. */ +struct vertex { + struct vec3 position; + struct vec3 normal; +}; + +#endif /* LIBRIN_FLOAT_TYPES_INCLUDED */ |