1 /// @ref core
2 /// @file glm/glm.hpp
3 ///
4 /// @defgroup core GLM Core
5 ///
6 /// @brief The core of GLM, which implements exactly and only the GLSL specification to the degree possible.
7 ///
8 /// The GLM core consists of @ref core_types "C++ types that mirror GLSL types" and
9 /// C++ functions that mirror the GLSL functions. It also includes
10 /// @ref core_precision "a set of precision-based types" that can be used in the appropriate
11 /// functions. The C++ types are all based on a basic set of @ref core_template "template types".
12 ///
13 /// The best documentation for GLM Core is the current GLSL specification,
14 /// <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.clean.pdf">version 4.2
15 /// (pdf file)</a>.
16 ///
17 /// GLM core functionnalities require <glm/glm.hpp> to be included to be used.
18 ///
19 /// @defgroup core_types Types
20 ///
21 /// @brief The standard types defined by the specification.
22 ///
23 /// These types are all typedefs of more generalized, template types. To see the definition
24 /// of these template types, go to @ref core_template.
25 ///
26 /// @ingroup core
27 ///
28 /// @defgroup core_precision Precision types
29 ///
30 /// @brief Non-GLSL types that are used to define precision-based types.
31 ///
32 /// The GLSL language allows the user to define the precision of a particular variable.
33 /// In OpenGL's GLSL, these precision qualifiers have no effect; they are there for compatibility
34 /// with OpenGL ES's precision qualifiers, where they @em do have an effect.
35 ///
36 /// C++ has no language equivalent to precision qualifiers. So GLM provides the next-best thing:
37 /// a number of typedefs of the @ref core_template that use a particular precision.
38 ///
39 /// None of these types make any guarantees about the actual precision used.
40 ///
41 /// @ingroup core
42 ///
43 /// @defgroup core_template Template types
44 ///
45 /// @brief The generic template types used as the basis for the core types.
46 ///
47 /// These types are all templates used to define the actual @ref core_types.
48 /// These templetes are implementation details of GLM types and should not be used explicitly.
49 ///
50 /// @ingroup core
51 
52 #include "detail/_fixes.hpp"
53 
54 #pragma once
55 
56 #include <cmath>
57 #include <climits>
58 #include <cfloat>
59 #include <limits>
60 #include <cassert>
61 #include "fwd.hpp"
62 
63 #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_CORE_INCLUDED_DISPLAYED)
64 #	define GLM_MESSAGE_CORE_INCLUDED_DISPLAYED
65 #	pragma message("GLM: Core library included")
66 #endif//GLM_MESSAGES
67 
68 #include "vec2.hpp"
69 #include "vec3.hpp"
70 #include "vec4.hpp"
71 #include "mat2x2.hpp"
72 #include "mat2x3.hpp"
73 #include "mat2x4.hpp"
74 #include "mat3x2.hpp"
75 #include "mat3x3.hpp"
76 #include "mat3x4.hpp"
77 #include "mat4x2.hpp"
78 #include "mat4x3.hpp"
79 #include "mat4x4.hpp"
80 
81 #include "trigonometric.hpp"
82 #include "exponential.hpp"
83 #include "common.hpp"
84 #include "packing.hpp"
85 #include "geometric.hpp"
86 #include "matrix.hpp"
87 #include "vector_relational.hpp"
88 #include "integer.hpp"
89