master
commit
a7f5e57d80
99 changed files with 2972 additions and 217 deletions
@ -0,0 +1,64 @@ |
||||
/*! |
||||
\defgroup core GLM Core |
||||
|
||||
\brief The core of GLM, which implements exactly and only the GLSL specification to the degree possible. |
||||
|
||||
The GLM core consists of \ref core_types "C++ types that mirror GLSL types", |
||||
\ref core_funcs "C++ functions that mirror the GLSL functions". It also includes |
||||
\ref core_precision "a set of precision-based types" that can be used in the appropriate |
||||
functions. The C++ types are all based on a basic set of \ref core_template "template types". |
||||
|
||||
The best documentation for GLM Core is the current GLSL specification, |
||||
<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.10.6.clean.pdf">version 4.1 |
||||
(pdf file)</a>. |
||||
There are a few \ref pg_differences "differences" between GLM core and GLSL. |
||||
**/ |
||||
|
||||
|
||||
/*! |
||||
\defgroup core_types Types |
||||
|
||||
\brief The standard types defined by the specification. |
||||
|
||||
These types are all typedefs of more generalized, template types. To see the definiton |
||||
of these template types, go to \ref core_template. |
||||
|
||||
\ingroup core |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup core_precision Precision types |
||||
|
||||
\brief Non-GLSL types that are used to define precision-based types. |
||||
|
||||
The GLSL language allows the user to define the precision of a particular variable. |
||||
In OpenGL's GLSL, these precision qualifiers have no effect; they are there for compatibility |
||||
with OpenGL ES's precision qualifiers, where they \em do have an effect. |
||||
|
||||
C++ has no language equivalent to precision qualifiers. So GLM provides the next-best thing: |
||||
a number of typedefs of the \ref core_template that use a particular precision. |
||||
|
||||
None of these types make any guarantees about the actual precision used. |
||||
|
||||
\ingroup core |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup core_template Template types |
||||
|
||||
\brief The generic template types used as the basis for the core types. |
||||
|
||||
These types are all templates used to define the actual \ref core_types. |
||||
These templetes are implementation details of GLM types and should not be used explicitly. |
||||
|
||||
\ingroup core |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup core_funcs Functions |
||||
|
||||
\brief The functions defined by the specification. |
||||
|
||||
\ingroup core |
||||
**/ |
||||
|
@ -0,0 +1,108 @@ |
||||
/*! |
||||
\defgroup gtc GTC Extensions (Stable) |
||||
|
||||
\brief Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program. |
||||
|
||||
GTC extensions aim to be stable. |
||||
|
||||
Even if it's highly unrecommended, it's possible to include all the extensions at once by |
||||
including <glm/ext.hpp>. Otherwise, each extension needs to be included a specific file. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtc_half_float GLM_GTC_half_float: Half-precision floating-point based types and functions. |
||||
\ingroup gtc |
||||
|
||||
Defines the half-precision floating-point type, along with various typedefs for vectors and matrices. |
||||
<glm/gtc/half_float.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtc_matrix_access GLM_GTC_matrix_access: Access matrix rows and columns. |
||||
\ingroup gtc |
||||
|
||||
Defines functions to access rows or columns of a matrix easily. |
||||
<glm/gtc/matrix_access.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtc_matrix_integer GLM_GTC_matrix_integer: Integer matrix types. |
||||
\ingroup gtc |
||||
|
||||
Defines a number of matrices with integer types. |
||||
<glm/gtc/matrix_integer.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtc_matrix_inverse GLM_GTC_matrix_inverse: Additional matrix inverse function |
||||
\ingroup gtc |
||||
|
||||
Defines additional matrix inverting functions. |
||||
<glm/gtc/matrix_inverse.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtc_matrix_transform GLM_GTC_matrix_transform: Matrix transform functions. |
||||
\ingroup gtc |
||||
|
||||
\brief Defines functions that generate common transformation matrices. |
||||
|
||||
The matrices generated by this extension use standard OpenGL fixed-function |
||||
conventions. For example, the lookAt function generates a transform from world |
||||
space into the specific eye space that the projective matrix functions ( |
||||
perspective, ortho, etc) are designed to expect. The OpenGL compatibility |
||||
specifications defines the particular layout of this eye space. |
||||
|
||||
<glm/gtc/matrix_transform.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtc_quaternion GLM_GTC_quaternion: Quaternion types and functions |
||||
\ingroup gtc |
||||
|
||||
\brief Defines a templated quaternion type and several quaternion operations. |
||||
|
||||
<glm/gtc/quaternion.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtc_type_precision GLM_GTC_type_precision: Vector and matrix types with defined precisions. |
||||
\ingroup gtc |
||||
|
||||
\brief Defines specific C++-based precision types. |
||||
|
||||
\ref core_precision defines types based on GLSL's precision qualifiers. This |
||||
extension defines types based on explicitly-sized C++ data types. |
||||
|
||||
<glm/gtc/type_precision.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtc_type_ptr GLM_GTC_type_ptr: Memory layout access. |
||||
\ingroup gtc |
||||
|
||||
\brief Used to get a pointer to the memory layout of a basic type. |
||||
|
||||
This extension defines an overloaded function, glm::value_ptr, which |
||||
takes any of the \ref core_template "core template types". It returns |
||||
a pointer to the memory layout of the object. Matrix types store their values |
||||
in column-major order. |
||||
|
||||
This is useful for uploading data to matrices or copying data to buffer objects. |
||||
|
||||
Example: |
||||
|
||||
\code |
||||
#include <glm/glm.hpp> |
||||
#include <glm/gtc/type_ptr.hpp> |
||||
|
||||
glm::vec3 aVector(3); |
||||
glm::mat4 someMatrix(1.0); |
||||
|
||||
glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector)); |
||||
glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix)); |
||||
\endcode |
||||
|
||||
<glm/gtc/type_ptr.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
@ -0,0 +1,498 @@ |
||||
/*! |
||||
\defgroup gtx GTX Extensions (Experimental) |
||||
|
||||
\brief Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program. |
||||
|
||||
Experimental extensions are useful functions and types, but the development of |
||||
their API and functionality is not necessarily stable. They can change substantially |
||||
between versions. Backwards compatibility is not much of an issue for them. |
||||
|
||||
Even if it's highly unrecommended, it's possible to include all the extensions at once by |
||||
including <glm/ext.hpp>. Otherwise, each extension needs to be included a specific file. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_associated_min_max GLM_GTX_associated_min_max: Associated Min/Max |
||||
\ingroup gtx |
||||
|
||||
\brief Min and max functions that return associated values not the compared onces. |
||||
<glm/gtx/associated_min_max.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_bit GLM_GTX_bit: Extended bitwise operations |
||||
\ingroup gtx |
||||
|
||||
\brief Allow to perform bit operations on integer values |
||||
|
||||
<glm/gtx/bit.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_closest_point GLM_GTX_closest_point: Find closest point |
||||
\ingroup gtx |
||||
|
||||
\brief Find the point on a straight line which is the closet of a point. |
||||
|
||||
<glm/gtx/closest_point.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_color_cast GLM_GTX_color_cast: Color conversion |
||||
\ingroup gtx |
||||
|
||||
\brief Conversion between two color types. |
||||
|
||||
<glm/gtx/color_cast.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_color_space GLM_GTX_color_space: RGB to HSV conversion |
||||
\ingroup gtx |
||||
|
||||
\brief Related to RGB to HSV conversions and operations. |
||||
|
||||
<glm/gtx/color_space.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_color_space_YCoCg GLM_GTX_color_space_YCoCg: RGB to YCoCg conversion |
||||
\ingroup gtx |
||||
|
||||
\brief RGB to YCoCg conversions and operations |
||||
|
||||
<glm/gtx/color_space_YCoCg.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_compatibility GLM_GTX_compatibility: Cg and HLSL compatibility |
||||
\ingroup gtx |
||||
|
||||
\brief Provide functions to increase the compatibility with Cg and HLSL languages |
||||
|
||||
<glm/gtx/compatibility.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_component_wise GLM_GTX_component_wise: Component wise |
||||
\ingroup gtx |
||||
|
||||
\brief Operations between components of a type |
||||
|
||||
<glm/gtx/component_wise.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_epsilon GLM_GTX_epsilon: Epsilon comparison |
||||
\ingroup gtx |
||||
|
||||
\brief Comparison functions for a user defined epsilon values. |
||||
|
||||
<glm/gtx/epsilon.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_euler_angles GLM_GTX_euler_angles: Matrix from euler angles |
||||
\ingroup gtx |
||||
|
||||
\brief Build matrices from Euler angles. |
||||
|
||||
<glm/gtx/euler_angles.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_extend GLM_GTX_extend: Position extending |
||||
\ingroup gtx |
||||
|
||||
\brief Extend a position from a source to a position at a defined length. |
||||
|
||||
<glm/gtx/extend.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_extented_min_max GLM_GTX_extented_min_max: Extended min max |
||||
\ingroup gtx |
||||
|
||||
\brief Min and max functions for 3 to 4 parameters. |
||||
|
||||
<glm/gtx/extented_min_max.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_fast_exponential GLM_GTX_fast_exponential: Fast exponentiation functions |
||||
\ingroup gtx |
||||
|
||||
\brief Fast but less accurate implementations of exponential based functions. |
||||
|
||||
<glm/gtx/fast_exponential.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_fast_square_root GLM_GTX_fast_square_root: Fast square root functions |
||||
\ingroup gtx |
||||
|
||||
\brief Fast but less accurate implementations of square root based functions. |
||||
|
||||
<glm/gtx/fast_square_root.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_fast_trigonometry GLM_GTX_fast_trigonometry: Fast trigonometric functions |
||||
\ingroup gtx |
||||
|
||||
\brief Fast but less accurate implementations of trigonometric functions. |
||||
|
||||
<glm/gtx/fast_trigonometry.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_handed_coordinate_space GLM_GTX_handed_coordinate_space: Space Handedness |
||||
\ingroup gtx |
||||
|
||||
\brief To know if a set of three basis vectors defines a right or left-handed coordinate system. |
||||
|
||||
<glm/gtx/handed_coordinate_system.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_inertia GLM_GTX_inertia: Intertial matrix |
||||
\ingroup gtx |
||||
|
||||
\brief Create inertia matrices |
||||
|
||||
<glm/gtx/inertia.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_int_10_10_10_2 GLM_GTX_int_10_10_10_2: Packed integer |
||||
\ingroup gtx |
||||
|
||||
\brief Pack vector to 1010102 integers. Storage only. |
||||
|
||||
<glm/gtx/int_10_10_10_2.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_integer GLM_GTX_integer: Extended integer functions |
||||
\ingroup gtx |
||||
|
||||
\brief Add support for integer for core functions |
||||
|
||||
<glm/gtx/integer.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_intersect GLM_GTX_intersect: Intersection tests |
||||
\ingroup gtx |
||||
|
||||
\brief Add intersection functions |
||||
|
||||
<glm/gtx/intersect.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_log_base GLM_GTX_log_base: Log with base |
||||
\ingroup gtx |
||||
|
||||
\brief Logarithm for any base. base can be a vector or a scalar. |
||||
|
||||
<glm/gtx/log_base.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_matrix_cross_product GLM_GTX_matrix_cross_product: Cross product matrix form |
||||
\ingroup gtx |
||||
|
||||
\brief Build cross product matrices |
||||
|
||||
<glm/gtx/matrix_cross_product.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_matrix_major_storage GLM_GTX_matrix_major_storage: Build matrix |
||||
\ingroup gtx |
||||
|
||||
\brief Build matrices with specific matrix order, row or column |
||||
|
||||
<glm/gtx/matrix_major_storage.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_matrix_operation GLM_GTX_matrix_operation: Extended matrix operations |
||||
\ingroup gtx |
||||
|
||||
\brief Build diagonal matrices from vectors. |
||||
|
||||
<glm/gtx/matrix_operation.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_matrix_query GLM_GTX_matrix_query: Query matrix properties |
||||
\ingroup gtx |
||||
|
||||
\brief Query to evaluate matrix properties |
||||
|
||||
<glm/gtx/matrix_query.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_mixed_product GLM_GTX_mixed_producte: Mixed product |
||||
\ingroup gtx |
||||
|
||||
\brief Mixed product of 3 vectors. |
||||
|
||||
<glm/gtx/mixed_product.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_multiple GLM_GTX_multiple: Multiples |
||||
\ingroup gtx |
||||
|
||||
\brief Find the closest number of a number multiple of other number. |
||||
|
||||
<glm/gtx/multiple.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_norm GLM_GTX_norm: Vector norm calculations |
||||
\ingroup gtx |
||||
|
||||
\brief Various way to compute vector norms. |
||||
|
||||
<glm/gtx/norm.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_normal GLM_GTX_normal: Compute normals |
||||
\ingroup gtx |
||||
|
||||
\brief Compute the normal of a triangle. |
||||
|
||||
<glm/gtx/normal.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_normalize_dot GLM_GTX_normalize_dot: Normalize dot product |
||||
\ingroup gtx |
||||
|
||||
\brief Dot product of vectors that need to be normalize with a single square root. |
||||
|
||||
<glm/gtx/normalized_dot.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_number_precision GLM_GTX_number_precision: Number precision |
||||
\ingroup gtx |
||||
|
||||
\brief Defined size types. |
||||
|
||||
<glm/gtx/number_precision.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_ocl_type GLM_GTX_ocl_type: OpenCL types |
||||
\ingroup gtx |
||||
|
||||
\brief OpenCL types. |
||||
|
||||
<glm/gtx/ocl_type.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_optimum_pow GLM_GTX_optimum_pow: Optimum pow |
||||
\ingroup gtx |
||||
|
||||
\brief Integer exponentiation of power functions. |
||||
|
||||
<glm/gtx/optimum_pow.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_orthonormalize GLM_GTX_orthonormalize: Orthonormalize |
||||
\ingroup gtx |
||||
|
||||
\brief Orthonormalize matrices. |
||||
|
||||
<glm/gtx/orthonormalize.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_perpendicular GLM_GTX_perpendicular: Perpendicular |
||||
\ingroup gtx |
||||
|
||||
\brief Perpendicular of a vector from other one |
||||
|
||||
<glm/gtx/perpendicular.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_polar_coordinates GLM_GTX_polar_coordinates: Polar coordinates |
||||
\ingroup gtx |
||||
|
||||
\brief Conversion from Euclidean space to polar space and revert. |
||||
|
||||
<glm/gtx/polar_coordinates.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_projection GLM_GTX_projection: Projection |
||||
\ingroup gtx |
||||
|
||||
\brief Projection of a vector to other one |
||||
|
||||
<glm/gtx/projection.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_quaternion GLM_GTX_quaternion: Extented quaternion types and functions |
||||
\ingroup gtx |
||||
|
||||
\brief Extented quaternion types and functions |
||||
|
||||
<glm/gtx/quaternion.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_random GLM_GTX_random: Random |
||||
\ingroup gtx |
||||
|
||||
\brief Generate random number from various distribution methods |
||||
|
||||
<glm/gtx/random.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_raw_data GLM_GTX_raw_data: Raw data |
||||
\ingroup gtx |
||||
|
||||
\brief Projection of a vector to other one |
||||
|
||||
<glm/gtx/raw_data.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_reciprocal GLM_GTX_reciprocal: Reciprocal |
||||
\ingroup gtx |
||||
|
||||
\brief Define secant, cosecant and cotangent functions. |
||||
|
||||
<glm/gtx/reciprocal.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_rotate_vector GLM_GTX_rotate_vector: Rotate vector |
||||
\ingroup gtx |
||||
|
||||
\brief Function to directly rotate a vector |
||||
|
||||
<glm/gtx/rotate_vector.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_simd_mat4 GLM_GTX_simd_mat4: SIMD mat4 type and functions |
||||
\ingroup gtx |
||||
|
||||
\brief SIMD implementation of mat4 type. |
||||
|
||||
<glm/gtx/simd_mat4.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_simd_vec4 GLM_GTX_simd_vec4: SIMD vec4 type and functions |
||||
\ingroup gtx |
||||
|
||||
\brief SIMD implementation of vec4 type. |
||||
|
||||
<glm/gtx/simd_vec4.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_spline GLM_GTX_spline: Spline |
||||
\ingroup gtx |
||||
|
||||
\brief Spline functions |
||||
|
||||
<glm/gtx/spline.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_string_cast GLM_GTX_string_cast: String cast |
||||
\ingroup gtx |
||||
|
||||
\brief Setup strings for GLM type values |
||||
|
||||
<glm/gtx/string_cast.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_transform GLM_GTX_transform: Extented transformation matrices |
||||
\ingroup gtx |
||||
|
||||
\brief Add transformation matrices |
||||
|
||||
<glm/gtx/transform.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_transform2 GLM_GTX_transform2: Extra transformation matrices |
||||
\ingroup gtx |
||||
|
||||
\brief Add extra transformation matrices |
||||
|
||||
<glm/gtx/transform2.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_unsigned_int GLM_GTX_unsigned_int: Unsigned int |
||||
\ingroup gtx |
||||
|
||||
\brief Add support for unsigned integer for core functions |
||||
|
||||
<glm/gtx/unsigned_int.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_vector_access GLM_GTX_vector_angle: Vector access |
||||
\ingroup gtx |
||||
|
||||
\brief Function to set values to vectors |
||||
|
||||
<glm/gtx/vector_access.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_vector_angle GLM_GTX_vector_angle: Vector angle |
||||
\ingroup gtx |
||||
|
||||
\brief Compute angle between vectors |
||||
|
||||
<glm/gtx/vector_angle.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_vector_query GLM_GTX_vector_query: Vector query |
||||
\ingroup gtx |
||||
|
||||
\brief Query informations of vector types |
||||
|
||||
<glm/gtx/vector_query.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_verbose_operator GLM_GTX_verbose_operator: Verbose operator |
||||
\ingroup gtx |
||||
|
||||
\brief Use words to replace operators |
||||
|
||||
<glm/gtx/verbose_operator.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup gtx_wrap GLM_GTX_wrap: Texture coordinate wrap modes |
||||
\ingroup gtx |
||||
|
||||
\brief Wrapping mode of texture coordinates. |
||||
|
||||
<glm/gtx/wrap.hpp> need to be included to use these functionalities. |
||||
**/ |
||||
|
@ -0,0 +1,629 @@ |
||||
/*! |
||||
\mainpage OpenGL Mathematics |
||||
|
||||
OpenGL Mathematics (GLM) is a C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specification. |
||||
|
||||
GLM provides classes and functions designed and implemented with the same naming conventions and functionalities than GLSL so that when a programmer knows GLSL, he knows GLM as well which makes it really easy to use. |
||||
|
||||
This project isn't limited by GLSL features. An extension system, based on the GLSL extension conventions, provides extended capabilities: matrix transformations, quaternions, half-based types, random numbers, etc... |
||||
|
||||
This library works perfectly with OpenGL but it also ensures interoperability with other third party libraries and SDK. It is a good candidate for software rendering (Raytracing / Rasterisation), image processing, physic simulations and any context that requires a simple and convenient mathematics library. |
||||
|
||||
\note The Doxygen-generated documentation will often state that a type or function |
||||
is defined in a namespace that is a child of the \link glm glm \endlink namespace. |
||||
Please ignore this; you can access all publicly available types as direct children |
||||
of the glm namespace. |
||||
|
||||
GLM is written as a platform independent library with no dependence and officially supports the following compilers: |
||||
1. GCC 3.4 and higher |
||||
2. LLVM 2.3 through GCC 4.2 front-end and higher |
||||
3. Visual Studio 2005 and higher |
||||
|
||||
The source code is licenced under the <a href="http://www.opensource.org/licenses/mit-license.php">MIT licence</a>. |
||||
|
||||
Thanks for contributing to the project by <a href="https://sourceforge.net/apps/trac/ogl-math/newticket">submitting tickets for bug reports and feature requests</a>. |
||||
(SF.net account required). Any feedback is welcome at glm@g-truc.net. |
||||
|
||||
\li \subpage pg_started |
||||
\li \subpage pg_advanced |
||||
\li \subpage pg_differences |
||||
\li \subpage pg_deprecated |
||||
\li \subpage pg_issues |
||||
\li \subpage pg_faq |
||||
\li \subpage pg_samples |
||||
\li \subpage pg_reference |
||||
**/ |
||||
|
||||
/*! |
||||
\page pg_started Getting Started |
||||
|
||||
\section started_compiler Compiler Setup |
||||
|
||||
GLM is a header only library, there is nothing to build to use it which increases its cross platform capabilities. |
||||
|
||||
To use GLM, a programmer only has to include <glm/glm.hpp>. This provides all the GLSL features implemented by GLM. |
||||
|
||||
GLM makes heavy usages of C++ templates. This design may significantly increase the compile time for files that use GLM. Precompiled headers are recommended to avoid this issue. |
||||
|
||||
\section started_sample Use Sample of GLM |
||||
\code |
||||
#include <glm/glm.hpp> |
||||
|
||||
int foo() |
||||
{ |
||||
glm::vec4 Position = glm::vec4(glm::vec3(0.0), 1.0); |
||||
glm::mat4 Model = glm::mat4(1.0); |
||||
Model[4] = glm::vec4(1.0, 1.0, 0.0, 1.0); |
||||
glm::vec4 Transformed = Model * Position; |
||||
return 0; |
||||
} |
||||
\endcode |
||||
|
||||
\section started_structure Library Structure |
||||
|
||||
GLM is arranged in 2 distinct segments. These are the GLM features based on the GLSL specification and a set of extensions. |
||||
Some extensions are stable and backward compatible (\ref gtc GTC \ref virtrev VIRTREV) but some are experimental (\ref gtx GTX) |
||||
which means that they are not guarantee to be backward compatible from version to version. |
||||
|
||||
The \ref core "GLM" represents only what GLSL's core provides in terms of types and functions |
||||
(to the best of GLM's ability to replicate them). All that is needed to use the core |
||||
is to <tt>#include <glm/glm.hpp></tt>. |
||||
|
||||
\ref gtc "GTC extensions" are functions and types that add onto the core. |
||||
These are considered reasonably stable, with their APIs not changing much between |
||||
versions. Each core extension is included with a separated header file include. All |
||||
of the core extensions are in the "glm/gtc" directory. |
||||
|
||||
\ref gtx "GTX extensions" are functions and types that add onto the |
||||
core. Unlike GTC extensions, their APIs are not considered particularly stable, which |
||||
is why they are marked "experimental". Like GTC extensions, each experimental extension is included |
||||
with a separate header file. |
||||
|
||||
All the extensions can be included at once by default with <tt>#include <glm/ext.hpp></tt> |
||||
but this is not recommanded as it will reduce compilation speed for many unused features. |
||||
|
||||
All of GLM is defined as direct children of the glm namespace, including extensions. |
||||
|
||||
To use a particular extension, simply include the extension header file. All |
||||
extension features are added to the glm namespace automatically. |
||||
|
||||
\code |
||||
#include <glm/glm.hpp> |
||||
#include <glm/gtc/matrix_transform.hpp> |
||||
|
||||
int foo() |
||||
{ |
||||
glm::vec4 Position = glm::vec4(glm::vec3(0.0f), 1.0f); |
||||
glm::mat4 Model = glm::translate( |
||||
glm::mat4(1.0f), glm::vec3(1.0f)); |
||||
glm::vec4 Transformed = Model * Position; |
||||
return 0; |
||||
} |
||||
\endcode |
||||
|
||||
\section started_dependencies Dependencies |
||||
|
||||
When <glm/glm.hpp> is included, GLM provides all the GLSL features it implements in C++. |
||||
|
||||
When an extension is included, all the dependent extensions will be included as well. All the extensions depend on GLM core. (<glm/glm.hpp>) |
||||
|
||||
There is no dependence with external libraries or external headers like gl.h, gl3.h, glu.h or windows.h. However, if <boost/static_assert.hpp> is included, Boost static assert will be used throughout GLM code to provide compiled time errors. |
||||
|
||||
\section started_interop OpenGL Interoperability |
||||
|
||||
It is often useful to get a vector type as an array of its base type. For example, the |
||||
OpenGL function <tt>glUniform3fv()</tt> takes an array instead of 3 individual values. |
||||
If the vector and matrix types were simple arrays, then one could pass them to the function |
||||
like so: <tt>glUniform3fv(loc, 1, glm::vec3(0))</tt>. However, this is not the case; |
||||
the vector and matrix types are C++ classes, not arrays. |
||||
|
||||
Instead, GLM provides a mechanism to get the content of a vector or matrix as |
||||
an array pointer. The \ref gtc_type_ptr extension provides this ability. |
||||
|
||||
\code |
||||
#include <glm/glm.hpp> |
||||
#include <glm/gtc/type_ptr.hpp> |
||||
|
||||
void BindUniforms(GLuint uniVec, GLuint uniMat) |
||||
{ |
||||
glm::vec4 v(0.0f); |
||||
glm::mat4 m(1.0f); |
||||
... |
||||
glUniform3fv(uniVec, 1, glm::value_ptr(v)); |
||||
glUniformMatrix4fv(uniMat, 1, GL_FALSE, glm::value_ptr(m)); |
||||
} |
||||
\endcode |
||||
|
||||
Notice that all matrix types are <em>column-major</em> rather than row-major. Hence the need to pass GL_FALSE to glUniformMatrix4fv. |
||||
|
||||
Alternatively, the first element of the type can be dereferenced. |
||||
|
||||
\code |
||||
#include <glm/glm.hpp> |
||||
|
||||
void BindUniforms(GLuint uniVec, GLuint uniMat) |
||||
{ |
||||
glm::vec4 v(0.0f); |
||||
glm::mat4 m(1.0f); |
||||
... |
||||
glUniform3fv(uniVec, 1, glm::value_ptr(&v[0])); |
||||
glUniformMatrix4fv(uniMat, 1, GL_FALSE, &m[0][0]); |
||||
} |
||||
\endcode |
||||
|
||||
This method requires dereferencing the very first basic type of the object, not merely the first element. |
||||
The [] operator on the matrix type returns a column vector; one must then access the first element of that column vector to get a pointer to the basic type. |
||||
|
||||
\note This operation could have been built into the base vector and matrix types and performed with a cast operator. |
||||
However, this has some downsides. Implicit casts can cause unexpected and unwanted behavior. |
||||
**/ |
||||
|
||||
/*! |
||||
\page pg_advanced Advanced Usage |
||||
|
||||
\section advanced_swizzle Swizzle Operators |
||||
|
||||
A common feature of shader languages like GLSL is components swizzling. |
||||
This involves being able to select which components of a vector are used and in what order. |
||||
For example, "variable.x", "variable.xxy", "variable.zxyy" are examples of swizzling. |
||||
|
||||
\code |
||||
vec4 A; |
||||
vec2 B; |
||||
... |
||||
B.yx = A.wy; |
||||
B = A.xx; |
||||
\endcode |
||||
|
||||
This functionally turns out to be really complicated to implement in C++ using the exact GLSL conventions. |
||||
GLM provides 2 implementions this feature. |
||||
|
||||
\subsection advanced_swizzle_macro Macro implementation |
||||
|
||||
The first implementation follows the GLSL convensions accurately. |
||||
It uses macros to achieve this, which might generates name conflicts with system headers or third party libraries. |
||||
Therefore, it is disabled by default. To enable this implementation, GLM_SWIZZLE must be defined before any inclusion of <glm/glm.hpp>. |
||||
|
||||
\code |
||||
#define GLM_SWIZZLE |
||||
#include <glm/glm.hpp> |
||||
\endcode |
||||
|
||||
This implementation can be partially enabled by defining GLM_SWIZZLE_XYZW, GLM_SWIZZLE_RGBA or GLM_SWIZZLE_STQP. |
||||
Each macro only enable a set of swizzling operators. For example we can only enable x,y,z,w and s,t,q,p operators using: |
||||
|
||||
\code |
||||
#define GLM_SWIZZLE_XYZW |
||||
#define GLM_SWIZZLE_STQP |
||||
#include <glm/glm.hpp> |
||||
\endcode |
||||
|
||||
\subsection advanced_swizzle_ext Extension implementation |
||||
|
||||
A safer way to do swizzling is to use the <glm/gtc/swizzle.hpp> extension. |
||||
This extension provides the GLSL functionality, but uses a different syntax for it. |
||||
Moreover, the swizzle extension also provides dynamic swizzling. |
||||
|
||||
Static swizzling is resovled at compile-time. |
||||
The swizzle mask ".xzyy" is as fixed as the type of a particular variable. |
||||
Dynamic swizzling is resolved at runtime via function calls. |
||||
Dynamic swizzling is more flexible, since one can choose the swizzle mask at runtime, but it runs slower. |
||||
This performance issue is enhanced when \ref advanced_simd "SIMD instructions" are used. |
||||
|
||||
\code |
||||
#include <glm/glm.hpp> |
||||
#include <glm/gtc/swizzle.hpp> |
||||
|
||||
void foo() |
||||
{ |
||||
glm::vec4 ColorRGBA(1.0f, 0.5f, 0.0f, 1.0f); |
||||
... |
||||
// Dynamic swizzling (at run time, more flexible) |
||||
// l-value: |
||||
glm::vec4 ColorBGRA1 = |
||||
glm::swizzle(ColorRGBA, glm::B, glm::G, glm::R, glm::A); |
||||
// r-value: |
||||
glm::swizzle(ColorRGBA, glm::B, glm::G, glm::R, glm::A) = ColorRGBA; |
||||
|
||||
// Static swizzling (at build time, faster) |
||||
// l-value: |
||||
glm::vec4 ColorBGRA2 = |
||||
glm::swizzle<glm::B, glm::G, glm::R, glm::A>(ColorRGBA); |
||||
// r-value: |
||||
glm::swizzle<glm::B, glm::G, glm::R, glm::A>(ColorRGBA) = ColorRGBA; |
||||
} |
||||
\endcode |
||||
|
||||
\section advanced_notify Notification System |
||||
|
||||
GLM includes a notification system which can display some information at build time: |
||||
\li Compiler |
||||
\li Build model: 32bits or 64 bits |
||||
\li C++ version |
||||
\li Architecture: x86, SSE, AVX, etc. |
||||
\li Included extensions |
||||
\li etc. |
||||
|
||||
This system is disable by default. To enable this system, define GLM_MESSAGES before any inclusion of <glm/glm.hpp>. |
||||
|
||||
\code |
||||
#define GLM_MESSAGES |
||||
#include <glm/glm.hpp> |
||||
\endcode |
||||
|
||||
\section advanced_inline Force Inline |
||||
|
||||
GLM's functions are defined in headers, so they are defined with C++'s "inline" delcaration. |
||||
This does not require the compiler to inline them, however. |
||||
If you want to force the compiler to inline the function, using whatever capabilities that the compiler provides to do so, |
||||
you can define GLM_FORCE_INLINE before any inclusion of <glm/glm.hpp>. |
||||
|
||||
\code |
||||
#define GLM_FORCE_INLINE |
||||
#include <glm/glm.hpp> |
||||
\endcode |
||||
|
||||
\section advanced_simd SIMD support |
||||
|
||||
GLM provides some SIMD optimizations based on compiler intrinsics. |
||||
These optimizations will be automatically utilized based on the build environment. |
||||
These optimizations are mainly available through the extensions \ref gtx_simd_vec4 and \ref gtx_simd_mat4. |
||||
|
||||
A programmer can restrict or force instruction sets used for these optimizations using GLM_FORCE_SSE2 or GLM_FORCE_AVX. |
||||
|
||||
A programmer can discard the use of intrinsics by defining GLM_FORCE_PURE before any inclusion of <glm/glm.hpp>. |
||||
If GLM_FORCE_PURE is defined, then including a SIMD extension will generate a build error. |
||||
|
||||
\code |
||||
#define GLM_FORCE_PURE |
||||
#include <glm/glm.hpp> |
||||
\endcode |
||||
|
||||
\section advanced_compatibility Compatibility |
||||
Compilers have some language extensions that GLM will automatically take advantage of them when they are enabled. |
||||
The #define GLM_FORCE_CXX98 can switch off these extensions, forcing GLM to operate on pure C++98. |
||||
|
||||
\code |
||||
#define GLM_FORCE_CXX98 |
||||
#include <glm/glm.hpp> |
||||
\endcode |
||||
**/ |
||||
|
||||
/*! |
||||
\page pg_deprecated Deprecated function replacements |
||||
|
||||
The OpenGL 3.0 specification deprecated some features, and most of these have been removed from the OpenGL 3.1 specfication and beyond. |
||||
GLM provides some replacement functions. Many of these functions come from the \ref gtc_matrix_transform extension. |
||||
|
||||
\section deprecated_opengl OpenGL function replacements |
||||
|
||||
<dl> |
||||
<dt>glRotate[fd]</dt> |
||||
<dd>\link glm::gtc::matrix_transform::rotate glm::rotate \endlink</dd> |
||||
<dt>glScale[fd]</dt> |
||||
<dd>\link glm::gtc::matrix_transform::scale glm::scale \endlink</dd> |
||||
<dt>glTranslate[fd]</dt> |
||||
<dd>\link glm::gtc::matrix_transform::translate glm::translate \endlink</dd> |
||||
<dt>glLoadIdentity</dt> |
||||
<dd>The default constructor of all matrix types creates an identity matrix.</dd> |
||||
<dt>glMultMatrix[fd]</dt> |
||||
<dd>Per the GLSL specification, the multiplication operator is overloaded for all matrix types. Multiplying two matrices together will perform matrix multiplication.</dd> |
||||
<dt>glLoadTransposeMatrix[fd]</dt> |
||||
<dd>\link glm::core::function::matrix::transpose glm::transpose \endlink</dd> |
||||
<dt>glMultTransposeMatrix</dt> |
||||
<dd>Combine the last two.</dd> |
||||
<dt>glFrustum</dt> |
||||
<dd>\link glm::gtc::matrix_transform::frustum glm::frustum \endlink</dd> |
||||
<dt>glOrtho</dt> |
||||
<dd>\link glm::gtc::matrix_transform::ortho glm::ortho \endlink</dd> |
||||
<dt>gluLookAt</dt> |
||||
<dd>\link glm::gtc::matrix_transform::lookAt glm::lookAt \endlink</dd> |
||||
</dl> |
||||
|
||||
\section deprecated_glu GLU function replacements |
||||
|
||||
<dl> |
||||
<dt>gluOrtho2D</dt> |
||||
<dd>\link glm::gtc::matrix_transform::ortho glm::ortho \endlink</dd> |
||||
<dt>gluPerspective</dt> |
||||
<dd>\link glm::gtc::matrix_transform::perspective glm::perspective \endlink</dd> |
||||
<dt>gluProject</dt> |
||||
<dd>\link glm::gtc::matrix_transform::project glm::project \endlink</dd> |
||||
<dt>gluUnProject</dt> |
||||
<dd>\link glm::gtc::matrix_transform::unProject glm::unProject \endlink</dd> |
||||
</dl> |
||||
**/ |
||||
|
||||
/*! |
||||
\page pg_differences Differences between GLSL and GLM core |
||||
|
||||
GLM comes very close to replicating GLSL, but it is not exact. Here is a list of |
||||
differences between GLM and GLSL: |
||||
|
||||
<ul> |
||||
<li> |
||||
Precision qualifiers. In GLSL numeric types can have qualifiers that define |
||||
the precision of that type. While OpenGL's GLSL ignores these qualifiers, OpenGL |
||||
ES's version of GLSL uses them. |
||||
|
||||
C++ has no language equivalent to precision qualifiers. Instead, GLM provides |
||||
a set of typedefs for each kind of precision qualifier and type. These types can |
||||
be found in \ref core_precision "their own section". |
||||
|
||||
Functions that take types tend to be templated on those types, so they can |
||||
take these qualified types just as well as the regular ones. |
||||
</li> |
||||
</ul> |
||||
**/ |
||||
|
||||
/*! |
||||
\page pg_faq FAQ |
||||
|
||||
\section faq1 Why does GLM follow GLSL specification and conventions? |
||||
|
||||
Following GLSL conventions is a really strict policy of GLM. GLM has been designed according to |
||||
the idea that everyone writes their own math library with their own conventions. The idea is that |
||||
brilliant developers (the OpenGL ARB) worked together and agreed to make GLSL. Following |
||||
GLSL conventions is a way to find consensus. Moreover, basically when a developer knows |
||||
GLSL, he knows GLM. |
||||
|
||||
\section faq2 Does GLM run GLSL programs? |
||||
|
||||
No, GLM is a C++ implementation of a subset of GLSL. |
||||
|
||||
\section faq3 Does a GLSL compiler build GLM codes? |
||||
|
||||
No, this is not what GLM intends to do! |
||||
|
||||
\section faq4 Should I use GTX extensions? |
||||
|
||||
\ref gtx are experimental. In GLM this means that these extensions might change from version to version without restriction. In practice, it doesn't really change except time to time. GTC extensions are stabled, tested and perfectly reliable in time. Many GTX extensions extend GTC extensions and provide a way to explore features and implementations before becoming stable by a promotion as GTC extensions. This is similar to how OpenGL extensions can be EXT or ARB extensions before becoming core functionality. |
||||
|
||||
In short, if you use a GTX extension, the API is much more likely to change from version to version than if you don't. But you should not feel too uncomfortable about using them. |
||||
|
||||
\section faq5 Where can I ask my questions? |
||||
|
||||
A good place is the OpenGL Toolkits forum on OpenGL.org: |
||||
http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=postlist&Board=10&page=1 |
||||
|
||||
\section faq6 Where can I find the documentation of extensions? |
||||
|
||||
The Doxygen generated documentation includes a complete list of all extensions available. |
||||
Explore this documentation to get a complete view of all GLM capabilities! |
||||
http://glm.g-truc.net/html/index.html |
||||
|
||||
\section faq7 Should I use 'using namespace glm;'? |
||||
|
||||
This is unwise. There is every chance that are that if 'using namespace glm;' is called, name collisions will happen. GLSL names for functions are fairly generic, so it is entirely likely that there is another function called, for example, \link glm::sqrt sqrt \endlink. |
||||
|
||||
If you need frequent use of particular types, you can bring them into the global |
||||
namespace with a 'using' declaration like this: |
||||
|
||||
/code |
||||
using glm::mat4; |
||||
|
||||
mat4 someVariable(3.0f); |
||||
/endcode |
||||
|
||||
\section faq8 Is GLM fast? |
||||
|
||||
GLM is mainly designed to be convenient; that's why it is written against GLSL specification. |
||||
|
||||
The <a href="http://en.wikipedia.org/wiki/Pareto_principle">80-20</a> rule suggests that 80% of a program's performance comes from 20% of its code. Therefore, one must first identify which 20% of the code is impacting the performance. |
||||
|
||||
In general, if one identifies certain math code to be a performance bottleneck, the only way to solve this is to write specialized code for those particular math needs. So no canned library solution would be suitable. |
||||
|
||||
That being said, GLM can provides some descent performances alternatives based on approximations or SIMD instructions. |
||||
**/ |
||||
|
||||
/*! |
||||
\page pg_samples Code Samples |
||||
|
||||
This series of samples only shows various GLM functionality. |
||||
|
||||
\section sample1 Compute a Triangle's Normal |
||||
|
||||
\code |
||||
#include <glm/glm.hpp> // vec3 normalize cross |
||||
|
||||
glm::vec3 computeNormal( |
||||
glm::vec3 const & a, |
||||
glm::vec3 const & b, |
||||
glm::vec3 const & c) |
||||
{ |
||||
return glm::normalize(glm::cross(c - a, b - a)); |
||||
} |
||||
\endcode |
||||
|
||||
A potentially faster, but less accurate alternative: |
||||
|
||||
\code |
||||
#include <glm/glm.hpp> // vec3 cross |
||||
#include <glm/gtx/fast_square_root.hpp> // fastNormalize |
||||
|
||||
glm::vec3 computeNormal( |
||||
glm::vec3 const & a, |
||||
glm::vec3 const & b, |
||||
glm::vec3 const & c) |
||||
{ |
||||
return glm::fastNormalize(glm::cross(c - a, b - a)); |
||||
} |
||||
\endcode |
||||
|
||||
\section sample2 Matrix Transform |
||||
|
||||
\code |
||||
#include <glm/glm.hpp> //vec3, vec4, ivec4, mat4 |
||||
#include <glm/gtc/matrix_transform.hpp> //translate, rotate, scale, perspective |
||||
#include <glm/gtc/type_ptr.hpp> //value_ptr |
||||
|
||||
void setUniformMVP( |
||||
GLuint Location, |
||||
glm::vec3 const & Translate, |
||||
glm::vec3 const & Rotate) |
||||
{ |
||||
glm::mat4 Projection = |
||||
glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f); |
||||
glm::mat4 ViewTranslate = glm::translate( |
||||
glm::mat4(1.0f), |
||||
Translate); |
||||
glm::mat4 ViewRotateX = glm::rotate( |
||||
ViewTranslate, |
||||
Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f)); |
||||
glm::mat4 View = glm::rotate( |
||||
ViewRotateX, |
||||
Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f)); |
||||
glm::mat4 Model = glm::scale( |
||||
glm::mat4(1.0f), |
||||
glm::vec3(0.5f)); |
||||
glm::mat4 MVP = Projection * View * Model; |
||||
glUniformMatrix4fv( |
||||
Location, 1, GL_FALSE, glm::value_ptr(MVP)); |
||||
} |
||||
\endcode |
||||
|
||||
\section sample3 Vector Types |
||||
|
||||
\code |
||||
#include <glm/glm.hpp> //vec2 |
||||
#include <glm/gtc/type_precision.hpp> //hvec2, i8vec2, i32vec2 |
||||
std::size_t const VertexCount = 4; |
||||
|
||||
// Float quad geometry |
||||
std::size_t const PositionSizeF32 = VertexCount * sizeof(glm::vec2); |
||||
glm::vec2 const PositionDataF32[VertexCount] = |
||||
{ |
||||
glm::vec2(-1.0f,-1.0f), |
||||
glm::vec2( 1.0f,-1.0f), |
||||
glm::vec2( 1.0f, 1.0f), |
||||
glm::vec2(-1.0f, 1.0f) |
||||
}; |
||||
|
||||
// Half-float quad geometry |
||||
std::size_t const PositionSizeF16 = VertexCount * sizeof(glm::hvec2); |
||||
glm::hvec2 const PositionDataF16[VertexCount] = |
||||
{ |
||||
glm::hvec2(-1.0f, -1.0f), |
||||
glm::hvec2( 1.0f, -1.0f), |
||||
glm::hvec2( 1.0f, 1.0f), |
||||
glm::hvec2(-1.0f, 1.0f) |
||||
}; |
||||
|
||||
// 8 bits signed integer quad geometry |
||||
std::size_t const PositionSizeI8 = VertexCount * sizeof(glm::i8vec2); |
||||
glm::i8vec2 const PositionDataI8[VertexCount] = |
||||
{ |
||||
glm::i8vec2(-1,-1), |
||||
glm::i8vec2( 1,-1), |
||||
glm::i8vec2( 1, 1), |
||||
glm::i8vec2(-1, 1) |
||||
}; |
||||
|
||||
// 32 bits signed integer quad geometry |
||||
std::size_t const PositionSizeI32 = VertexCount * sizeof(glm::i32vec2); |
||||
glm::i32vec2 const PositionDataI32[VertexCount] = |
||||
{ |
||||
glm::i32vec2 (-1,-1), |
||||
glm::i32vec2 ( 1,-1), |
||||
glm::i32vec2 ( 1, 1), |
||||
glm::i32vec2 (-1, 1) |
||||
}; |
||||
\endcode |
||||
|
||||
\section sample4 Lighting |
||||
|
||||
\code |
||||
#include <glm/glm.hpp> // vec3 normalize reflect dot pow |
||||
#include <glm/gtx/random.hpp> // vecRand3 |
||||
|
||||
// vecRand3, generate a random and equiprobable normalized vec3 |
||||
|
||||
glm::vec3 lighting( |
||||
intersection const & Intersection, |
||||
material const & Material, |
||||
light const & Light, |
||||
glm::vec3 const & View) |
||||
{ |
||||
glm::vec3 Color = glm::vec3(0.0f); |
||||
glm::vec3 LightVertor = glm::normalize( |
||||
Light.position() - Intersection.globalPosition() + |
||||
glm::vecRand3(0.0f, Light.inaccuracy()); |
||||
|
||||
if(!shadow( |
||||
Intersection.globalPosition(), |
||||
Light.position(), |
||||
LightVertor)) |
||||
{ |
||||
float Diffuse = glm::dot(Intersection.normal(), LightVector); |
||||
if(Diffuse <= 0.0f) |
||||
return Color; |
||||
if(Material.isDiffuse()) |
||||
Color += Light.color() * Material.diffuse() * Diffuse; |
||||
|
||||
if(Material.isSpecular()) |
||||
{ |
||||
glm::vec3 Reflect = glm::reflect( |
||||
-LightVector, |
||||
Intersection.normal()); |
||||
float Dot = glm::dot(Reflect, View); |
||||
float Base = Dot > 0.0f ? Dot : 0.0f; |
||||
float Specular = glm::pow(Base, Material.exponent()); |
||||
Color += Material.specular() * Specular; |
||||
} |
||||
return Color; |
||||
} |
||||
\endcode |
||||
|
||||
**/ |
||||
|
||||
/*! |
||||
\page pg_issues Known Issues |
||||
|
||||
\section issue1 not Function |
||||
|
||||
The GLSL keyword not is also a keyword in C++. To prevent name collisions, the GLSL not |
||||
function has been implemented with the name not_. |
||||
|
||||
\section issue2 Half Based Types |
||||
GLM supports half float number types through the extension GLM_GTC_half_float. This extension provides the types half, hvec*, hmat*x* and hquat*. |
||||
|
||||
Unfortunately, C++ 98 specification doesn’t support anonymous unions which limit hvec* vector components access to x, y, z and w. |
||||
|
||||
However, Visual C++ does support anonymous unions if the language extensions are enabled (/Za to disable them). In this case GLM will automatically enables the support of all component names (x,y,z,w ; r,g,b,a ; s,t,p,q). |
||||
|
||||
To uniformalize the component access across types, GLM provides the define GLM_FORCE_ONLY_XYZW which will generates errors if component accesses are done using r,g,b,a or s,t,p,q. |
||||
|
||||
\code |
||||
#define GLM_FORCE_ONLY_XYZW |
||||
#include <glm/glm.hpp> |
||||
\endcode |
||||
**/ |
||||
|
||||
/*! |
||||
\page pg_reference References |
||||
|
||||
OpenGL 4.1 core specification: |
||||
http://www.opengl.org/registry/doc/glspec41.core.20100725.pdf |
||||
|
||||
GLSL 4.10 specification: |
||||
http://www.opengl.org/registry/doc/GLSLangSpec.4.10.6.clean.pdf |
||||
|
||||
GLU 1.3 specification: |
||||
http://www.opengl.org/documentation/specs/glu/glu1_3.pdf |
||||
|
||||
GLM HEAD snapshot: |
||||
http://ogl-math.git.sourceforge.net/git/gitweb.cgi?p=ogl-math/ogl-math;a=snapshot;h=HEAD;sf=tgz |
||||
|
||||
GLM Trac, for bug report and feature request: |
||||
https://sourceforge.net/apps/trac/ogl-math |
||||
|
||||
GLM website: |
||||
http://glm.g-truc.net |
||||
|
||||
G-Truc Creation page: |
||||
http://www.g-truc.net/project-0016.html |
||||
|
||||
The OpenGL Toolkits forum to ask questions about GLM: |
||||
http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=postlist&Board=10&page=1 |
||||
**/ |
||||
|
@ -0,0 +1,822 @@ |
||||
/* The standard CSS for doxygen */ |
||||
|
||||
body, table, div, p, dl |
||||
{ |
||||
font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; |
||||
font-size: 12px; |
||||
} |
||||
|
||||
body |
||||
{ |
||||
background-color: #FFC080; |
||||
/*width:1024px;*/ |
||||
margin-left:auto; |
||||
margin-right:auto; |
||||
} |
||||
|
||||
/* @group Heading Levels */ |
||||
|
||||
h1 |
||||
{ |
||||
color:#FF8000; |
||||
font-size: 150%; |
||||
} |
||||
|
||||
h2 |
||||
{ |
||||
color:#FF8000; |
||||
font-size: 120%; |
||||
} |
||||
|
||||
h3 { |
||||
font-size: 100%; |
||||
} |
||||
|
||||
dt { |
||||
font-weight: bold; |
||||
} |
||||
|
||||
div.multicol { |
||||
-moz-column-gap: 1em; |
||||
-webkit-column-gap: 1em; |
||||
-moz-column-count: 3; |
||||
-webkit-column-count: 3; |
||||
} |
||||
|
||||
p.startli, p.startdd, p.starttd { |
||||
margin-top: 2px; |
||||
} |
||||
|
||||
p.endli { |
||||
margin-bottom: 0px; |
||||
} |
||||
|
||||
p.enddd { |
||||
margin-bottom: 4px; |
||||
} |
||||
|
||||
p.endtd { |
||||
margin-bottom: 2px; |
||||
} |
||||
|
||||
/* @end */ |
||||
|
||||
caption { |
||||
font-weight: bold; |
||||
} |
||||
|
||||
span.legend { |
||||
font-size: 70%; |
||||
text-align: center; |
||||
} |
||||
|
||||
h3.version { |
||||
font-size: 90%; |
||||
text-align: center; |
||||
} |
||||
|
||||
div.qindex, div.navtab{ |
||||
background-color: #FFF8F0; |
||||
border: 0px solid #FF8000; |
||||
text-align: center; |
||||
margin: 2px; |
||||
padding: 2px; |
||||
} |
||||
|
||||
div.qindex, div.navpath { |
||||
width: 100%; |
||||
line-height: 140%; |
||||
} |
||||
|
||||
div.navtab { |
||||
margin-right: 15px; |
||||
} |
||||
|
||||
/* @group Link Styling */ |
||||
|
||||
a { |
||||
color: #000000; |
||||
font-weight: normal; |
||||
/*text-decoration: none;*/ |
||||
} |
||||
|
||||
.contents a:visited { |
||||
color: #606060; |
||||
} |
||||
/* |
||||
.contents{ |
||||
background-color: #FFF8F0; |
||||
} |
||||
*/ |
||||
a:hover { |
||||
text-decoration: underline; |
||||
} |
||||
|
||||
a.qindex { |
||||
font-weight: bold; |
||||
} |
||||
|
||||
a.qindexHL { |
||||
font-weight: bold; |
||||
background-color: #9CAFD4; |
||||
color: #ffffff; |
||||
border: 1px double #869DCA; |
||||
} |
||||
|
||||
.contents a.qindexHL:visited { |
||||
color: #ffffff; |
||||
} |
||||
|
||||
a.el { |
||||
font-weight: bold; |
||||
} |
||||
|
||||
a.elRef { |
||||
} |
||||
|
||||
a.code { |
||||
color: #4665A2; |
||||
} |
||||
|
||||
a.codeRef { |
||||
color: #4665A2; |
||||
} |
||||
|
||||
/* @end */ |
||||
|
||||
dl.el { |
||||
margin-left: -1cm; |
||||
} |
||||
|
||||
.fragment { |
||||
font-family: monospace, fixed; |
||||
font-size: 105%; |
||||
} |
||||
|
||||
pre.fragment { |
||||
border: 0px solid #FF8000; |
||||
background-color: #FFF8F0; |
||||
padding: 4px 6px; |
||||
margin: 4px 8px 4px 2px; |
||||
overflow: auto; |
||||
word-wrap: break-word; |
||||
font-size: 9pt; |
||||
line-height: 125%; |
||||
} |
||||
|
||||
div.ah { |
||||
background-color: black; |
||||
font-weight: bold; |
||||
color: #ffffff; |
||||
margin-bottom: 3px; |
||||
margin-top: 3px; |
||||
padding: 0.2em; |
||||
border: solid thin #333; |
||||
border-radius: 0.5em; |
||||
-webkit-border-radius: .5em; |
||||
-moz-border-radius: .5em; |
||||
box-shadow: 2px 2px 3px #999; |
||||
-webkit-box-shadow: 2px 2px 3px #999; |
||||
-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; |
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); |
||||
background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); |
||||
} |
||||
|
||||
div.groupHeader { |
||||
margin-left: 16px; |
||||
margin-top: 12px; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
div.groupText { |
||||
margin-left: 16px; |
||||
font-style: italic; |
||||
} |
||||
|
||||
body { |
||||
background: white; |
||||
color: black; |
||||
margin: 0; |
||||
} |
||||
|
||||
div.contents |
||||
{ |
||||
background-color:#FFF8F0; |
||||
padding-top: 10px; |
||||
padding-left: 10px; |
||||
padding-right: 10px; |
||||
} |
||||
|
||||
td.indexkey { |
||||
font-weight: bold; |
||||
border: 0px solid #C4CFE5; |
||||
margin: 2px 0px 2px 0; |
||||
padding: 4px 10px; |
||||
} |
||||
|
||||
td.indexvalue { |
||||
border: 0px solid #C4CFE5; |
||||
padding: 2px 10px; |
||||
margin: 2px 0px; |
||||
} |
||||
|
||||
tr.memlist { |
||||
background-color: #FFF8F0; |
||||
} |
||||
|
||||
p.formulaDsp { |
||||
text-align: center; |
||||
} |
||||
|
||||
img.formulaDsp { |
||||
|
||||
} |
||||
|
||||
img.formulaInl { |
||||
vertical-align: middle; |
||||
} |
||||
|
||||
div.center { |
||||
text-align: center; |
||||
margin-top: 0px; |
||||
margin-bottom: 0px; |
||||
padding: 0px; |
||||
} |
||||
|
||||
div.center img { |
||||
border: 0px; |
||||
} |
||||
|
||||
address.footer { |
||||
text-align: right; |
||||
padding-right: 12px; |
||||
} |
||||
|
||||
img.footer { |
||||
border: 0px; |
||||
vertical-align: middle; |
||||
} |
||||
|
||||
/* @group Code Colorization */ |
||||
|
||||
span.keyword { |
||||
color: #008000 |
||||
} |
||||
|
||||
span.keywordtype { |
||||
color: #604020 |
||||
} |
||||
|
||||
span.keywordflow { |
||||
color: #e08000 |
||||
} |
||||
|
||||
span.comment { |
||||
color: #800000 |
||||
} |
||||
|
||||
span.preprocessor { |
||||
color: #806020 |
||||
} |
||||
|
||||
span.stringliteral { |
||||
color: #002080 |
||||
} |
||||
|
||||
span.charliteral { |
||||
color: #008080 |
||||
} |
||||
|
||||
span.vhdldigit { |
||||
color: #ff00ff |
||||
} |
||||
|
||||
span.vhdlchar { |
||||
color: #000000 |
||||
} |
||||
|
||||
span.vhdlkeyword { |
||||
color: #700070 |
||||
} |
||||
|
||||
span.vhdllogic { |
||||
color: #ff0000 |
||||
} |
||||
|
||||
/* @end */ |
||||
|
||||
/* |
||||
.search { |
||||
color: #003399; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
form.search { |
||||
margin-bottom: 0px; |
||||
margin-top: 0px; |
||||
} |
||||
|
||||
input.search { |
||||
font-size: 75%; |
||||
color: #000080; |
||||
font-weight: normal; |
||||
background-color: #e8eef2; |
||||
} |
||||
*/ |
||||
|
||||
td.tiny { |
||||
font-size: 75%; |
||||
} |
||||
|
||||
.dirtab { |
||||
padding: 4px; |
||||
border-collapse: collapse; |
||||
border: 0px solid #A3B4D7; |
||||
} |
||||
|
||||
th.dirtab { |
||||
background: #EBEFF6; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
hr { |
||||
height: 0px; |
||||
border: none; |
||||
border-top: 0px solid #FF8000; |
||||
} |
||||
|
||||
hr.footer { |
||||
height: 1px; |
||||
} |
||||
|
||||
/* @group Member Descriptions */ |
||||
|
||||
table.memberdecls { |
||||
border-spacing: 0px; |
||||
padding: 0px; |
||||
} |
||||
|
||||
.mdescLeft, .mdescRight, |
||||
.memItemLeft, .memItemRight, |
||||
.memTemplItemLeft, .memTemplItemRight, .memTemplParams { |
||||
background-color: #FFFCF8; |
||||
border: none; |
||||
margin: 4px; |
||||
padding: 1px 0 0 8px; |
||||
} |
||||
|
||||
.mdescLeft, .mdescRight { |
||||
padding: 0px 8px 4px 8px; |
||||
color: #000000; |
||||
} |
||||
|
||||
.memItemLeft, .memItemRight, .memTemplParams { |
||||
border-top: 4px solid #FFFFFF; |
||||
} |
||||
|
||||
.memItemLeft, .memTemplItemLeft { |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
.memTemplParams { |
||||
color: #404040; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
/* @end */ |
||||
|
||||
/* @group Member Details */ |
||||
|
||||
/* Styles for detailed member documentation */ |
||||
|
||||
.memtemplate { |
||||
font-size: 80%; |
||||
color: #4665A2; |
||||
font-weight: normal; |
||||
margin-left: 9px; |
||||
} |
||||
|
||||
.memnav { |
||||
background-color: #EBEFF6; |
||||
border: 1px solid #A3B4D7; |
||||
text-align: center; |
||||
margin: 2px; |
||||
margin-right: 15px; |
||||
padding: 2px; |
||||
} |
||||
|
||||
.memitem { |
||||
padding: 0; |
||||
margin-bottom: 10px; |
||||
} |
||||
|
||||
.memname { |
||||
white-space: nowrap; |
||||
font-weight: bold; |
||||
margin-left: 6px; |
||||
} |
||||
|
||||
.memproto { |
||||
border-top: 1px solid #FF8000; |
||||
border-left: 1px solid #FF8000; |
||||
border-right: 1px solid #FF8000; |
||||
padding: 6px 0px 6px 0px; |
||||
color: #253555; |
||||
font-weight: bold; |
||||
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); |
||||
/* opera specific markup */ |
||||
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); |
||||
border-top-right-radius: 8px; |
||||
border-top-left-radius: 8px; |
||||
/* firefox specific markup */ |
||||
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; |
||||
-moz-border-radius-topright: 8px; |
||||
-moz-border-radius-topleft: 8px; |
||||
/* webkit specific markup */ |
||||
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); |
||||
-webkit-border-top-right-radius: 8px; |
||||
-webkit-border-top-left-radius: 8px; |
||||
/*background-image:url('nav_f.png');*/ |
||||
background-repeat:repeat-x; |
||||
background-color: #FFF8F0; |
||||
|
||||
} |
||||
|
||||
.memdoc { |
||||
border-bottom: 1px solid #FF8000; |
||||
border-left: 1px solid #FF8000; |
||||
border-right: 1px solid #FF8000; |
||||
padding: 2px 5px; |
||||
background-color: #FFFFFF; |
||||
border-top-width: 0; |
||||
/* opera specific markup */ |
||||
border-bottom-left-radius: 8px; |
||||
border-bottom-right-radius: 8px; |
||||
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); |
||||
/* firefox specific markup */ |
||||
-moz-border-radius-bottomleft: 8px; |
||||
-moz-border-radius-bottomright: 8px; |
||||
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; |
||||
background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #FFF0E0 95%, #FFF8F0); |
||||
/* webkit specific markup */ |
||||
-webkit-border-bottom-left-radius: 8px; |
||||
-webkit-border-bottom-right-radius: 8px; |
||||
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); |
||||
background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#FFF0E0), to(#FFF8F0)); |
||||
} |
||||
|
||||
.paramkey { |
||||
text-align: right; |
||||
} |
||||
|
||||
.paramtype { |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
.paramname { |
||||
color: #602020; |
||||
white-space: nowrap; |
||||
} |
||||
.paramname em { |
||||
font-style: normal; |
||||
} |
||||
|
||||
.params, .retval, .exception, .tparams { |
||||
border-spacing: 6px 2px; |
||||
} |
||||
|
||||
.params .paramname, .retval .paramname { |
||||
font-weight: bold; |
||||
vertical-align: top; |
||||
} |
||||
|
||||
.params .paramtype { |
||||
font-style: italic; |
||||
vertical-align: top; |
||||
} |
||||
|
||||
.params .paramdir { |
||||
font-family: "courier new",courier,monospace; |
||||
vertical-align: top; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/* @end */ |
||||
|
||||
/* @group Directory (tree) */ |
||||
|
||||
/* for the tree view */ |
||||
|
||||
.ftvtree { |
||||
font-family: sans-serif; |
||||
margin: 0px; |
||||
} |
||||
|
||||
/* these are for tree view when used as main index */ |
||||
|
||||
.directory { |
||||
font-size: 9pt; |
||||
font-weight: bold; |
||||
margin: 5px; |
||||
} |
||||
|
||||
.directory h3 { |
||||
margin: 0px; |
||||
margin-top: 1em; |
||||
font-size: 11pt; |
||||
} |
||||
|
||||
/* |
||||
The following two styles can be used to replace the root node title |
||||
with an image of your choice. Simply uncomment the next two styles, |
||||
specify the name of your image and be sure to set 'height' to the |
||||
proper pixel height of your image. |
||||
*/ |
||||
|
||||
/* |
||||
.directory h3.swap { |
||||
height: 61px; |
||||
background-repeat: no-repeat; |
||||
background-image: url("yourimage.gif"); |
||||
} |
||||
.directory h3.swap span { |
||||
display: none; |
||||
} |
||||
*/ |
||||
|
||||
.directory > h3 { |
||||
margin-top: 0; |
||||
} |
||||
|
||||
.directory p { |
||||
margin: 0px; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
.directory div { |
||||
display: none; |
||||
margin: 0px; |
||||
} |
||||
|
||||
.directory img { |
||||
vertical-align: -30%; |
||||
} |
||||
|
||||
/* these are for tree view when not used as main index */ |
||||
|
||||
.directory-alt { |
||||
font-size: 100%; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
.directory-alt h3 { |
||||
margin: 0px; |
||||
margin-top: 1em; |
||||
font-size: 11pt; |
||||
} |
||||
|
||||
.directory-alt > h3 { |
||||
margin-top: 0; |
||||
} |
||||
|
||||
.directory-alt p { |
||||
margin: 0px; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
.directory-alt div { |
||||
display: none; |
||||
margin: 0px; |
||||
} |
||||
|
||||
.directory-alt img { |
||||
vertical-align: -30%; |
||||
} |
||||
|
||||
/* @end */ |
||||
|
||||
div.dynheader { |
||||
margin-top: 8px; |
||||
} |
||||
|
||||
address { |
||||
font-style: normal; |
||||
color: #804000; |
||||
} |
||||
|
||||
table.doxtable { |
||||
border-collapse:collapse; |
||||
} |
||||
|
||||
table.doxtable td, table.doxtable th { |
||||
border: 1px solid #2D4068; |
||||
padding: 3px 7px 2px; |
||||
} |
||||
|
||||
table.doxtable th { |
||||
background-color: #374F7F; |
||||
color: #FFFFFF; |
||||
font-size: 110%; |
||||
padding-bottom: 4px; |
||||
padding-top: 5px; |
||||
text-align:left; |
||||
} |
||||
|
||||
.tabsearch { |
||||
top: 0px; |
||||
left: 10px; |
||||
height: 36px; |
||||
background-image: url('tab_b.png'); |
||||
z-index: 101; |
||||
overflow: hidden; |
||||
font-size: 13px; |
||||
} |
||||
|
||||
.navpath ul |
||||
{ |
||||
font-size: 11px; |
||||
background-image:url('tab_b.png'); |
||||
background-repeat:repeat-x; |
||||
height:30px; |
||||
line-height:30px; |
||||
color:#8AA0CC; |
||||
border:solid 1px #C2CDE4; |
||||
overflow:hidden; |
||||
margin:0px; |
||||
padding:0px; |
||||
} |
||||
|
||||
.navpath li |
||||
{ |
||||
list-style-type:none; |
||||
float:left; |
||||
padding-left:10px; |
||||
padding-right:15px; |
||||
background-image:url('bc_s.png'); |
||||
background-repeat:no-repeat; |
||||
background-position:right; |
||||
color:#364D7C; |
||||
} |
||||
|
||||
.navpath li.navelem a |
||||
{ |
||||
height:32px; |
||||
display:block; |
||||
text-decoration: none; |
||||
outline: none; |
||||
} |
||||
|
||||
.navpath li.navelem a:hover |
||||
{ |
||||
color:#FF8000; |
||||
} |
||||
|
||||
.navpath li.footer |
||||
{ |
||||
list-style-type:none; |
||||
float:right; |
||||
padding-left:10px; |
||||
padding-right:15px; |
||||
background-image:none; |
||||
background-repeat:no-repeat; |
||||
background-position:right; |
||||
color:#364D7C; |
||||
font-size: 8pt; |
||||
} |
||||
|
||||
|
||||
div.summary |
||||
{ |
||||
float: right; |
||||
font-size: 8pt; |
||||
padding-right: 5px; |
||||
width: 50%; |
||||
text-align: right; |
||||
} |
||||
|
||||
div.summary a |
||||
{ |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
div.ingroups |
||||
{ |
||||
font-size: 8pt; |
||||
padding-left: 5px; |
||||
width: 50%; |
||||
text-align: left; |
||||
} |
||||
|
||||
div.ingroups a |
||||
{ |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
div.header |
||||
{ |
||||
/*background-image:url('nav_h.png');*/ |
||||
background-repeat:repeat-x; |
||||
background-color: #FFF8F0; |
||||
margin: 0px; |
||||
border-bottom: 0px solid #FFC080; |
||||
} |
||||
|
||||
div.headertitle |
||||
{ |
||||
padding: 5px 5px 5px 10px; |
||||
} |
||||
|
||||
dl |
||||
{ |
||||
padding: 0 0 0 10px; |
||||
} |
||||
|
||||
dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug |
||||
{ |
||||
border-color: #FF8000; |
||||
border-left:4px solid; |
||||
padding: 0 0 0 6px; |
||||
} |
||||
|
||||
dl.note |
||||
{ |
||||
border-color: #D0D000; |
||||
} |
||||
|
||||
dl.warning, dl.attention |
||||
{ |
||||
border-color: #FF0000; |
||||
} |
||||
|
||||
dl.pre, dl.post, dl.invariant |
||||
{ |
||||
border-color: #00D000; |
||||
} |
||||
|
||||
dl.deprecated |
||||
{ |
||||
border-color: #505050; |
||||
} |
||||
|
||||
dl.todo |
||||
{ |
||||
border-color: #00C0E0; |
||||
} |
||||
|
||||
dl.test |
||||
{ |
||||
border-color: #3030E0; |
||||
} |
||||
|
||||
dl.bug |
||||
{ |
||||
border-color: #C08050; |
||||
} |
||||
|
||||
#projectlogo |
||||
{ |
||||
text-align: center; |
||||
vertical-align: bottom; |
||||
border-collapse: separate; |
||||
} |
||||
|
||||
#projectlogo img |
||||
{ |
||||
border: 0px none; |
||||
} |
||||
|
||||
#projectname |
||||
{ |
||||
font: 300% arial,sans-serif; |
||||
margin: 0px; |
||||
padding: 0px; |
||||
} |
||||
|
||||
#projectbrief |
||||
{ |
||||
font: 120% arial,sans-serif; |
||||
margin: 0px; |
||||
padding: 0px; |
||||
} |
||||
|
||||
#projectnumber |
||||
{ |
||||
font: 50% arial,sans-serif; |
||||
margin: 0px; |
||||
padding: 0px; |
||||
} |
||||
|
||||
#titlearea |
||||
{ |
||||
padding: 0px; |
||||
margin: 0px; |
||||
width: 100%; |
||||
border-bottom: 0px solid #FF8000; |
||||
} |
||||
|
||||
#top |
||||
{ |
||||
/*background-color:#000000;*/ |
||||
} |
@ -0,0 +1,62 @@ |
||||
.tabs, .tabs2, .tabs3 { |
||||
/*background-image: url('tab_b.png');*/ |
||||
background-color:#FFF8F0; |
||||
width: 100%; |
||||
z-index: 101; |
||||
font-size: 13px; |
||||
} |
||||
|
||||
.tabs2 { |
||||
font-size: 10px; |
||||
} |
||||
.tabs3 { |
||||
font-size: 9px; |
||||
} |
||||
|
||||
.tablist { |
||||
margin: 0; |
||||
padding: 0; |
||||
display: table; |
||||
} |
||||
|
||||
.tablist li { |
||||
float: left; |
||||
display: table-cell; |
||||
/*background-image: url('tab_b.png');*/ |
||||
line-height: 36px; |
||||
list-style: none; |
||||
} |
||||
|
||||
.tablist a { |
||||
display: block; |
||||
padding: 0 20px; |
||||
font-weight: bold; |
||||
/*background-image:url('tab_s.png');*/ |
||||
background-repeat:no-repeat; |
||||
background-position:right; |
||||
color: #FF8000; |
||||
/*text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);*/ |
||||
text-decoration: none; |
||||
outline: none; |
||||
} |
||||
|
||||
.tabs3 .tablist a { |
||||
padding: 0 10px; |
||||
} |
||||
|
||||
.tablist a:hover { |
||||
/*background-image: url('tab_h.png');*/ |
||||
background-color:#FFFEFD; |
||||
background-repeat:repeat-x; |
||||
color: #FF8000; |
||||
/*text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);*/ |
||||
text-decoration:underline; |
||||
} |
||||
|
||||
.tablist li.current a { |
||||
/*background-image: url('tab_a.png');*/ |
||||
background-color:#FFFEFD; |
||||
background-repeat:repeat-x; |
||||
color: #FF8000; |
||||
/*text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);*/ |
||||
} |
@ -0,0 +1,14 @@ |
||||
/*! |
||||
\defgroup virtrev VIRTREV Extensions |
||||
|
||||
\brief Extensions develop and maintain by Mathieu [matrem] Roumillac (http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showprofile&User=22660). |
||||
**/ |
||||
|
||||
/*! |
||||
\defgroup virtrev_xstream GLM_VIRTREV_xstream: xml like output |
||||
\ingroup virtrev |
||||
|
||||
\brief Streaming vector and matrix in a xml way. |
||||
|
||||
Include <glm/virtrev/xstream.hpp> for this functionality. |
||||
**/ |
Loading…
Reference in New Issue