1b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/////////////////////////////////////////////////////////////////////////////////// 2b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// OpenGL Mathematics (glm.g-truc.net) 3b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// 4b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) 5b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// Permission is hereby granted, free of charge, to any person obtaining a copy 6b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// of this software and associated documentation files (the "Software"), to deal 7b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// in the Software without restriction, including without limitation the rights 8b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// copies of the Software, and to permit persons to whom the Software is 10b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// furnished to do so, subject to the following conditions: 11b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// 12b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// The above copyright notice and this permission notice shall be included in 13b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// all copies or substantial portions of the Software. 14b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// 15b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// THE SOFTWARE. 22b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// 23b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// @ref core 24b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// @file glm/core/dummy.cpp 25b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// @date 2011-01-19 / 2011-06-15 26b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// @author Christophe Riccio 27b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// 28b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// GLM is a header only library. There is nothing to compile. 29b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/// dummy.cpp exist only a wordaround for CMake file. 30b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/////////////////////////////////////////////////////////////////////////////////// 31b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG 32b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#define GLM_FORCE_RADIANS 33b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#define GLM_MESSAGES 34b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include "../glm.hpp" 35b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <limits> 36b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG 37b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGstruct material 38b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG{ 39b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec4 emission; // Ecm 40b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec4 ambient; // Acm 41b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec4 diffuse; // Dcm 42b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec4 specular; // Scm 43b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG float shininess; // Srm 44b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG}; 45b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG 46b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGstruct light 47b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG{ 48b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec4 ambient; // Acli 49b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec4 diffuse; // Dcli 50b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec4 specular; // Scli 51b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec4 position; // Ppli 52b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec4 halfVector; // Derived: Hi 53b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec3 spotDirection; // Sdli 54b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG float spotExponent; // Srli 55b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG float spotCutoff; // Crli 56b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG // (range: [0.0,90.0], 180.0) 57b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG float spotCosCutoff; // Derived: cos(Crli) 58b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG // (range: [1.0,0.0],-1.0) 59b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG float constantAttenuation; // K0 60b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG float linearAttenuation; // K1 61b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG float quadraticAttenuation;// K2 62b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG}; 63b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG 64b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG 65b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG// Sample 1 66b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/vec3.hpp>// glm::vec3 67b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/geometric.hpp>// glm::cross, glm::normalize 68b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG 69b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGglm::vec3 computeNormal 70b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG( 71b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec3 const & a, 72b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec3 const & b, 73b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec3 const & c 74b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG) 75b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG{ 76b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG return glm::normalize(glm::cross(c - a, b - a)); 77b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG} 78b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG 79b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGtypedef unsigned int GLuint; 80b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#define GL_FALSE 0 81b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGvoid glUniformMatrix4fv(GLuint, int, int, float*){} 82b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG 83b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG// Sample 2 84b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/vec3.hpp> // glm::vec3 85b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/vec4.hpp> // glm::vec4, glm::ivec4 86b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/mat4x4.hpp> // glm::mat4 87b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/gtc/matrix_transform.hpp> // glm::translate, glm::rotate, glm::scale, glm::perspective 88b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/gtc/type_ptr.hpp> // glm::value_ptr 89b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGvoid func(GLuint LocationMVP, float Translate, glm::vec2 const & Rotate) 90b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG{ 91b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f); 92b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Translate)); 93b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f)); 94b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::mat4 View = glm::rotate(ViewRotateX, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f)); 95b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f)); 96b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::mat4 MVP = Projection * View * Model; 97b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glUniformMatrix4fv(LocationMVP, 1, GL_FALSE, glm::value_ptr(MVP)); 98b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG} 99b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG 100b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG// Sample 3 101b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/vec2.hpp>// glm::vec2 102b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/packing.hpp>// glm::packUnorm2x16 103b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/integer.hpp>// glm::uint 104b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/gtc/type_precision.hpp>// glm::i8vec2, glm::i32vec2 105b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGstd::size_t const VertexCount = 4; 106b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG// Float quad geometry 107b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGstd::size_t const PositionSizeF32 = VertexCount * sizeof(glm::vec2); 108b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGglm::vec2 const PositionDataF32[VertexCount] = 109b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG{ 110b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec2(-1.0f,-1.0f), 111b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec2( 1.0f,-1.0f), 112b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec2( 1.0f, 1.0f), 113b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec2(-1.0f, 1.0f) 114b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG }; 115b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG// Half-float quad geometry 116b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGstd::size_t const PositionSizeF16 = VertexCount * sizeof(glm::uint); 117b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGglm::uint const PositionDataF16[VertexCount] = 118b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG{ 119b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::uint(glm::packUnorm2x16(glm::vec2(-1.0f, -1.0f))), 120b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::uint(glm::packUnorm2x16(glm::vec2( 1.0f, -1.0f))), 121b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::uint(glm::packUnorm2x16(glm::vec2( 1.0f, 1.0f))), 122b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::uint(glm::packUnorm2x16(glm::vec2(-1.0f, 1.0f))) 123b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG}; 124b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG// 8 bits signed integer quad geometry 125b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGstd::size_t const PositionSizeI8 = VertexCount * sizeof(glm::i8vec2); 126b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGglm::i8vec2 const PositionDataI8[VertexCount] = 127b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG{ 128b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::i8vec2(-1,-1), 129b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::i8vec2( 1,-1), 130b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::i8vec2( 1, 1), 131b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::i8vec2(-1, 1) 132b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG}; 133b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG// 32 bits signed integer quad geometry 134b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGstd::size_t const PositionSizeI32 = VertexCount * sizeof(glm::i32vec2); 135b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGglm::i32vec2 const PositionDataI32[VertexCount] = 136b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG{ 137b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::i32vec2 (-1,-1), 138b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::i32vec2 ( 1,-1), 139b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::i32vec2 ( 1, 1), 140b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::i32vec2 (-1, 1) 141b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG}; 142b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG 143b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGstruct intersection 144b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG{ 145b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec4 position; 146b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec3 normal; 147b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG}; 148b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG 149b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG/* 150b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG// Sample 4 151b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/vec3.hpp>// glm::vec3 152b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/geometric.hpp>// glm::normalize, glm::dot, glm::reflect 153b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/exponential.hpp>// glm::pow 154b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG#include <glm/gtc/random.hpp>// glm::vecRand3 155b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGglm::vec3 lighting 156b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG( 157b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG intersection const & Intersection, 158b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG material const & Material, 159b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG light const & Light, 160b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec3 const & View 161b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG) 162b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG{ 163b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec3 Color(0.0f); 164b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec3 LightVertor(glm::normalize( 165b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG Light.position - Intersection.position + 166b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vecRand3(0.0f, Light.inaccuracy)); 167b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG 168b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG if(!shadow(Intersection.position, Light.position, LightVertor)) 169b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG { 170b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG float Diffuse = glm::dot(Intersection.normal, LightVector); 171b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG if(Diffuse <= 0.0f) 172b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG return Color; 173b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG if(Material.isDiffuse()) 174b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG Color += Light.color() * Material.diffuse * Diffuse; 175b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG if(Material.isSpecular()) 176b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG { 177b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::vec3 Reflect(glm::reflect( 178b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::normalize(-LightVector), 179b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG glm::normalize(Intersection.normal))); 180b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG float Dot = glm::dot(Reflect, View); 181b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG float Base = Dot > 0.0f ? Dot : 0.0f; 182b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG float Specular = glm::pow(Base, Material.exponent); 183b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG Color += Material.specular * Specular; 184b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG } 185b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG } 186b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG return Color; 187b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG} 188b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG*/ 189b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarGint main() 190b0b195df6c4343219e339ccb37978e8432a5f871Tony-LunarG{ 191 return 0; 192} 193