Visualization Library 2.0.0

A lightweight C++ OpenGL middleware for 2D/3D graphics

VL     Star     Watch     Fork     Issue

[Download] [Tutorials] [All Classes] [Grouped Classes]
Namespaces | Functions
glsl_math.hpp File Reference

Implements the OpenGL Shading Language convenience functions for scalar and vector operations. More...

#include <cmath>
#include <limits>
#include <vlCore/Vector4.hpp>
#include <vlCore/Matrix4.hpp>

Go to the source code of this file.

Namespaces

 vl
 Visualization Library main namespace.
 

Functions

template<typename T >
vl::asinh (T x)
 
template<typename T >
vl::acosh (T x)
 
template<typename T >
vl::atanh (T x)
 
template<typename T >
bool vl::isnan (T value)
 
template<typename T >
bool vl::isinf (T value)
 
template<typename T >
bool vl::isinf_pos (T value)
 
template<typename T >
bool vl::isinf_neg (T value)
 
template<typename T >
vl::modf (T a, T &intpart)
 
template<typename T >
vl::radians (T degrees)
 
template<typename T >
Vector2< T > vl::radians (const Vector2< T > &degrees)
 
template<typename T >
Vector3< T > vl::radians (const Vector3< T > &degrees)
 
template<typename T >
Vector4< T > vl::radians (const Vector4< T > &degrees)
 
template<typename T >
vl::degrees (T radians)
 
template<typename T >
Vector2< T > vl::degrees (const Vector2< T > &radians)
 
template<typename T >
Vector3< T > vl::degrees (const Vector3< T > &radians)
 
template<typename T >
Vector4< T > vl::degrees (const Vector4< T > &radians)
 
template<typename T >
vl::sin (T a)
 
template<typename T >
Vector2< T > vl::sin (const Vector2< T > &angle)
 
template<typename T >
Vector3< T > vl::sin (const Vector3< T > &angle)
 
template<typename T >
Vector4< T > vl::sin (const Vector4< T > &angle)
 
template<typename T >
vl::cos (T a)
 
template<typename T >
Vector2< T > vl::cos (const Vector2< T > &angle)
 
template<typename T >
Vector3< T > vl::cos (const Vector3< T > &angle)
 
template<typename T >
Vector4< T > vl::cos (const Vector4< T > &angle)
 
template<typename T >
vl::tan (T a)
 
template<typename T >
Vector2< T > vl::tan (const Vector2< T > &angle)
 
template<typename T >
Vector3< T > vl::tan (const Vector3< T > &angle)
 
template<typename T >
Vector4< T > vl::tan (const Vector4< T > &angle)
 
template<typename T >
vl::atan (T a)
 
template<typename T >
Vector2< T > vl::atan (const Vector2< T > &a, const Vector2< T > &b)
 
template<typename T >
Vector3< T > vl::atan (const Vector3< T > &a, const Vector3< T > &b)
 
template<typename T >
Vector4< T > vl::atan (const Vector4< T > &a, const Vector4< T > &b)
 
template<typename T >
vl::asin (T a)
 
template<typename T >
Vector2< T > vl::asin (const Vector2< T > &angle)
 
template<typename T >
Vector3< T > vl::asin (const Vector3< T > &angle)
 
template<typename T >
Vector4< T > vl::asin (const Vector4< T > &angle)
 
template<typename T >
vl::acos (T a)
 
template<typename T >
Vector2< T > vl::acos (const Vector2< T > &angle)
 
template<typename T >
Vector3< T > vl::acos (const Vector3< T > &angle)
 
template<typename T >
Vector4< T > vl::acos (const Vector4< T > &angle)
 
template<typename T >
vl::sinh (T a)
 
template<typename T >
Vector2< T > vl::sinh (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::sinh (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::sinh (const Vector4< T > &a)
 
template<typename T >
vl::cosh (T a)
 
template<typename T >
Vector2< T > vl::cosh (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::cosh (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::cosh (const Vector4< T > &a)
 
template<typename T >
vl::tanh (T a)
 
template<typename T >
Vector2< T > vl::tanh (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::tanh (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::tanh (const Vector4< T > &a)
 
template<typename T >
Vector2< T > vl::asinh (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::asinh (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::asinh (const Vector4< T > &a)
 
template<typename T >
Vector2< T > vl::acosh (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::acosh (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::acosh (const Vector4< T > &a)
 
template<typename T >
Vector2< T > vl::atanh (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::atanh (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::atanh (const Vector4< T > &a)
 
template<typename T >
vl::pow (T a, T b)
 
template<typename T >
Vector2< T > vl::pow (const Vector2< T > &a, const Vector2< T > &b)
 
template<typename T >
Vector3< T > vl::pow (const Vector3< T > &a, const Vector3< T > &b)
 
template<typename T >
Vector4< T > vl::pow (const Vector4< T > &a, const Vector4< T > &b)
 
template<typename T >
vl::exp (T a)
 
template<typename T >
Vector2< T > vl::exp (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::exp (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::exp (const Vector4< T > &a)
 
template<typename T >
vl::log (T a)
 
template<typename T >
Vector2< T > vl::log (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::log (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::log (const Vector4< T > &a)
 
template<typename T >
vl::exp2 (T a)
 
template<typename T >
Vector2< T > vl::exp2 (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::exp2 (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::exp2 (const Vector4< T > &a)
 
template<typename T >
vl::log2 (T a)
 
template<typename T >
Vector2< T > vl::log2 (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::log2 (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::log2 (const Vector4< T > &a)
 
template<typename T >
vl::log10 (T a)
 
template<typename T >
Vector2< T > vl::log10 (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::log10 (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::log10 (const Vector4< T > &a)
 
template<typename T >
vl::sqrt (T a)
 
template<typename T >
Vector2< T > vl::sqrt (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::sqrt (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::sqrt (const Vector4< T > &a)
 
template<typename T >
vl::inversesqrt (T a)
 
template<typename T >
Vector2< T > vl::inversesqrt (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::inversesqrt (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::inversesqrt (const Vector4< T > &a)
 
template<typename T >
vl::abs (T a)
 
template<typename T >
Vector2< T > vl::abs (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::abs (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::abs (const Vector4< T > &a)
 
template<typename T >
vl::sign (T a)
 
template<typename T >
Vector2< T > vl::sign (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::sign (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::sign (const Vector4< T > &a)
 
template<typename T >
vl::floor (T a)
 
template<typename T >
Vector2< T > vl::floor (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::floor (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::floor (const Vector4< T > &a)
 
template<typename T >
vl::fract (T a)
 
template<typename T >
Vector2< T > vl::fract (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::fract (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::fract (const Vector4< T > &a)
 
template<typename T >
vl::trunc (T a)
 
template<typename T >
Vector2< T > vl::trunc (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::trunc (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::trunc (const Vector4< T > &a)
 
template<typename T >
vl::round (T x)
 
template<typename T >
Vector2< T > vl::round (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::round (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::round (const Vector4< T > &a)
 
float vl::modf (float a, float &intpart)
 
double vl::modf (double a, double &intpart)
 
template<typename T >
Vector2< T > vl::modf (const Vector2< T > &a, Vector2< T > &intpart)
 
template<typename T >
Vector3< T > vl::modf (const Vector3< T > &a, Vector3< T > &intpart)
 
template<typename T >
Vector4< T > vl::modf (const Vector4< T > &a, Vector4< T > &intpart)
 
float vl::roundEven (float a, float epsilon)
 
double vl::roundEven (double a, double epsilon)
 
template<typename T >
Vector2< T > vl::roundEven (const Vector2< T > &a, T epsilon=0.00001)
 
template<typename T >
Vector3< T > vl::roundEven (const Vector3< T > &a, T epsilon=0.00001)
 
template<typename T >
Vector4< T > vl::roundEven (const Vector4< T > &a, T epsilon=0.00001)
 
template<typename T >
vl::ceil (T a)
 
template<typename T >
Vector2< T > vl::ceil (const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::ceil (const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::ceil (const Vector4< T > &a)
 
template<typename T >
vl::mod (T a, T b)
 
template<typename T >
Vector2< T > vl::mod (const Vector2< T > &a, T b)
 
template<typename T >
Vector3< T > vl::mod (const Vector3< T > &a, T b)
 
template<typename T >
Vector4< T > vl::mod (const Vector4< T > &a, T b)
 
template<typename T >
Vector2< T > vl::mod (const Vector2< T > &a, const Vector2< T > &b)
 
template<typename T >
Vector3< T > vl::mod (const Vector3< T > &a, const Vector3< T > &b)
 
template<typename T >
Vector4< T > vl::mod (const Vector4< T > &a, const Vector4< T > &b)
 
template<typename T >
vl::mix (T a, T b, T t)
 
template<typename T >
Vector2< T > vl::mix (const Vector2< T > &a, const Vector2< T > &b, T t)
 
template<typename T >
Vector3< T > vl::mix (const Vector3< T > &a, const Vector3< T > &b, T t)
 
template<typename T >
Vector4< T > vl::mix (const Vector4< T > &a, const Vector4< T > &b, T t)
 
template<typename T >
Vector2< T > vl::mix (const Vector2< T > &a, const Vector2< T > &b, const Vector2< T > &t)
 
template<typename T >
Vector3< T > vl::mix (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &t)
 
template<typename T >
Vector4< T > vl::mix (const Vector4< T > &a, const Vector4< T > &b, const Vector4< T > &t)
 
template<typename T >
vl::step (T edge, T a)
 
template<typename T >
Vector2< T > vl::step (const Vector2< T > &edge, const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::step (const Vector3< T > &edge, const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::step (const Vector4< T > &edge, const Vector4< T > &a)
 
template<typename T >
vl::smoothstep (T edge0, T edge1, T a)
 
template<typename T >
Vector2< T > vl::smoothstep (const Vector2< T > &edge0, const Vector2< T > &edge1, const Vector2< T > &a)
 
template<typename T >
Vector3< T > vl::smoothstep (const Vector3< T > &edge0, const Vector3< T > &edge1, const Vector3< T > &a)
 
template<typename T >
Vector4< T > vl::smoothstep (const Vector4< T > &edge0, const Vector4< T > &edge1, const Vector4< T > &a)
 
template<typename T >
ivec2 vl::isnan (const Vector2< T > &a)
 
template<typename T >
ivec3 vl::isnan (const Vector3< T > &a)
 
template<typename T >
ivec4 vl::isnan (const Vector4< T > &a)
 
template<typename T >
ivec2 vl::isinf (const Vector2< T > &a)
 
template<typename T >
ivec3 vl::isinf (const Vector3< T > &a)
 
template<typename T >
ivec4 vl::isinf (const Vector4< T > &a)
 
template<typename T >
vl::length (T v)
 
template<typename T >
vl::length (const Vector2< T > &v)
 
template<typename T >
vl::length (const Vector3< T > &v)
 
template<typename T >
vl::length (const Vector4< T > &v)
 
template<typename T >
vl::distance (T p0, T p1)
 
template<typename T >
vl::distance (const Vector2< T > &p0, const Vector2< T > &p1)
 
template<typename T >
vl::distance (const Vector3< T > &p0, const Vector3< T > &p1)
 
template<typename T >
vl::distance (const Vector4< T > &p0, const Vector4< T > &p1)
 
float vl::dot (float a, float b)
 
double vl::dot (double a, double b)
 
real vl::dot (int a, int b)
 
real vl::dot (unsigned int a, unsigned int b)
 
template<typename T >
vl::normalize (T)
 
template<typename T >
Vector2< T > vl::normalize (const Vector2< T > &v)
 
template<typename T >
Vector3< T > vl::normalize (const Vector3< T > &v)
 
template<typename T >
Vector4< T > vl::normalize (const Vector4< T > &v)
 
template<typename T >
vl::faceforward (T N, T I, T Nref)
 
template<typename T >
Vector2< T > vl::faceforward (const Vector2< T > &N, const Vector2< T > &I, const Vector2< T > &Nref)
 
template<typename T >
Vector3< T > vl::faceforward (const Vector3< T > &N, const Vector3< T > &I, const Vector3< T > &Nref)
 
template<typename T >
Vector4< T > vl::faceforward (const Vector4< T > &N, const Vector4< T > &I, const Vector4< T > &Nref)
 
template<typename T >
vl::reflect (T I, T N)
 
template<typename T >
Vector2< T > vl::reflect (const Vector2< T > &I, const Vector2< T > &N)
 
template<typename T >
Vector3< T > vl::reflect (const Vector3< T > &I, const Vector3< T > &N)
 
template<typename T >
Vector4< T > vl::reflect (const Vector4< T > &I, const Vector4< T > &N)
 
template<typename T >
vl::refract (T I, T N, T eta)
 
template<typename T >
Vector2< T > vl::refract (const Vector2< T > &I, const Vector2< T > &N, T eta)
 
template<typename T >
Vector3< T > vl::refract (const Vector3< T > &I, const Vector3< T > &N, T eta)
 
template<typename T >
Vector4< T > vl::refract (const Vector4< T > &I, const Vector4< T > &N, T eta)
 
template<typename T >
Matrix2< T > vl::matrixCompMult (const Matrix2< T > &a, const Matrix2< T > &b)
 
template<typename T >
Matrix3< T > vl::matrixCompMult (const Matrix3< T > &a, const Matrix3< T > &b)
 
template<typename T >
Matrix4< T > vl::matrixCompMult (const Matrix4< T > &a, const Matrix4< T > &b)
 
template<typename T >
Matrix2< T > vl::outerProduct (const Vector2< T > &a, const Vector2< T > &b)
 
template<typename T >
Matrix3< T > vl::outerProduct (const Vector3< T > &a, const Vector3< T > &b)
 
template<typename T >
Matrix4< T > vl::outerProduct (const Vector4< T > &a, const Vector4< T > &b)
 
template<typename T >
Matrix2< T > vl::transpose (const Matrix2< T > &a)
 
template<typename T >
Matrix3< T > vl::transpose (const Matrix3< T > &a)
 
template<typename T >
Matrix4< T > vl::transpose (const Matrix4< T > &a)
 
template<typename T >
ivec4 vl::lessThan (const Vector4< T > &a, const Vector4< T > &b)
 
template<typename T >
ivec3 vl::lessThan (const Vector3< T > &a, const Vector3< T > &b)
 
template<typename T >
ivec2 vl::lessThan (const Vector2< T > &a, const Vector2< T > &b)
 
template<typename T >
ivec4 vl::lessThanEqual (const Vector4< T > &a, const Vector4< T > &b)
 
template<typename T >
ivec3 vl::lessThanEqual (const Vector3< T > &a, const Vector3< T > &b)
 
template<typename T >
ivec2 vl::lessThanEqual (const Vector2< T > &a, const Vector2< T > &b)
 
template<typename T >
ivec4 vl::greaterThan (const Vector4< T > &a, const Vector4< T > &b)
 
template<typename T >
ivec3 vl::greaterThan (const Vector3< T > &a, const Vector3< T > &b)
 
template<typename T >
ivec2 vl::greaterThan (const Vector2< T > &a, const Vector2< T > &b)
 
template<typename T >
ivec4 vl::greaterThanEqual (const Vector4< T > &a, const Vector4< T > &b)
 
template<typename T >
ivec3 vl::greaterThanEqual (const Vector3< T > &a, const Vector3< T > &b)
 
template<typename T >
ivec2 vl::greaterThanEqual (const Vector2< T > &a, const Vector2< T > &b)
 
template<typename T >
ivec4 vl::equal (const Vector4< T > &a, const Vector4< T > &b)
 
template<typename T >
ivec3 vl::equal (const Vector3< T > &a, const Vector3< T > &b)
 
template<typename T >
ivec2 vl::equal (const Vector2< T > &a, const Vector2< T > &b)
 
template<typename T >
ivec4 vl::notEqual (const Vector4< T > &a, const Vector4< T > &b)
 
template<typename T >
ivec3 vl::notEqual (const Vector3< T > &a, const Vector3< T > &b)
 
template<typename T >
ivec2 vl::notEqual (const Vector2< T > &a, const Vector2< T > &b)
 
bool vl::any (const ivec2 &a)
 
bool vl::any (const ivec3 &a)
 
bool vl::any (const ivec4 &a)
 
bool vl::all (const ivec2 &a)
 
bool vl::all (const ivec3 &a)
 
bool vl::all (const ivec4 &a)
 

Detailed Description

Implements the OpenGL Shading Language convenience functions for scalar and vector operations.

This functions are particularly useful when you want to port C++ code to GLSL and vice versa, or when you want to quickly prototype in C++ an algorithm that will be ported later to GLSL.

Note that most of this functions take as arguments not only int, unsigned int, float and double variables but also their vector counterparts like fvec4, Vector4<T>, ivec4, uvec4, fvec3, fvec2 etc. For example you can do the following:

// clamp a float value
float f = someValueFloat()
f = vl::clamp(f, 0.0f, 1.0f);
// clamp a vector value
vl::fvec4 v = someValueVec4();
v = vl::clamp(v, vl::fvec4(1,2,3,4), vl::fvec4(5,6,7,8));
// the same goes for functions like mix(), min(), max(), sin(), cos(), floor() etc.

This module also implements other convenience functions like isnan(), isinf(), isinf_pos(), isinf_neg().

The functions are divided in the following categories:

Angle and trigonometry functions
radians(), degrees(), sin(), cos(), tan(), asin(), acos(), atan()
Hyperbolic functions
sinh(), cosh(), tanh(), asinh(), acosh(), atanh()
Exponential functions
pow(), exp(), log(), exp2(), log2(), log10(), sqrt(), inversesqrt(),
Common functions
abs(), sign(), floor(), trunc(), round(), roundEven(), ceil(), fract(), mod(), modf(), min(), max(), clamp(), mix(), step(), smoothstep(), isnan(), isinf()
Geometric functions
length(), distance(), dot(), cross(), normalize(), faceforward(), reflect(), refract()
Matrix functions
matrixCompMult(), outerProduct(), transpose(),
Vector relational functions
lessThan(), lessThanEqual(), greaterThan(), greaterThanEqual(), equal(), notEqual(), any(), all(), not()
See also
For more information please refer to the official OpenGL Shading Language manual and specifications. See also the official OpenGL & OpenGL Utility Specifications page.

Definition in file glsl_math.hpp.