Files
igl/external/embree/tutorials/common/math/math.isph
T

71 lines
3.7 KiB
Plaintext
Executable File

// ======================================================================== //
// Copyright 2009-2014 Intel Corporation //
// //
// Licensed under the Apache License, Version 2.0 (the "License"); //
// you may not use this file except in compliance with the License. //
// You may obtain a copy of the License at //
// //
// http://www.apache.org/licenses/LICENSE-2.0 //
// //
// Unless required by applicable law or agreed to in writing, software //
// distributed under the License is distributed on an "AS IS" BASIS, //
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //
// See the License for the specific language governing permissions and //
// limitations under the License. //
// ======================================================================== //
#pragma once
////////////////////////////////////////////////////////////////////////////////
/// Constants
////////////////////////////////////////////////////////////////////////////////
#define inf floatbits(0x7F800000)
#define pos_inf floatbits(0x7F800000)
#define neg_inf floatbits(0xFF800000)
#define M_PI 3.14159265358979323846f
#define pi 3.14159265358979323846f
#define two_pi 6.283185307179586232f
#define four_pi 12.566370614359172464f
#define one_over_pi 0.31830988618379069122f
#define one_over_two_pi 0.15915494309189534561f
#define one_over_four_pi 0.079577471545947672804f
#define sqrtf sqrt
#define sinf sin
#define cosf cos
#define powf pow
////////////////////////////////////////////////////////////////////////////////
/// Functions
////////////////////////////////////////////////////////////////////////////////
inline uniform float sqr(const uniform float f) { return f*f; }
inline varying float sqr(const varying float f) { return f*f; }
inline uniform float rcp_safe(uniform float f) { return rcp((abs(f) < 1e-8f) ? 1e-8f : f); }
inline varying float rcp_safe(varying float f) { return rcp((abs(f) < 1e-8f) ? 1e-8f : f); }
inline uniform float clamp (const uniform float v) { return max(0.0f,min(v,1.0f)); }
inline varying float clamp (const varying float v) { return max(0.0f,min(v,1.0f)); }
inline uniform float clamp (const uniform float v, const uniform float lower, const uniform float upper) { return max(lower,min(v,upper)); }
inline varying float clamp (const varying float v, const varying float lower, const varying float upper) { return max(lower,min(v,upper)); }
inline uniform int clamp (const uniform int v, const uniform int lower, const uniform int upper) { return max(lower,min(v,upper)); }
inline varying int clamp (const varying int v, const varying int lower, const varying int upper) { return max(lower,min(v,upper)); }
inline uniform float deg2rad (const uniform float x) { return x * 1.74532925199432957692e-2f; }
inline varying float deg2rad (const varying float x) { return x * 1.74532925199432957692e-2f; }
inline uniform float rad2deg (const uniform float x) { return x * 5.72957795130823208768e1f; }
inline varying float rad2deg (const varying float x) { return x * 5.72957795130823208768e1f; }
inline uniform float sin2cos ( const uniform float x ) { return sqrt(max(0.0f,1.0f-x*x)); }
inline varying float sin2cos ( const varying float x ) { return sqrt(max(0.0f,1.0f-x*x)); }
inline uniform float cos2sin ( const uniform float x ) { return sin2cos(x); }
inline varying float cos2sin ( const varying float x ) { return sin2cos(x); }