From f0885d36ffac6c5260ab5694cf435946641c47a1 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Fri, 14 Aug 2015 16:13:47 +0300 Subject: [PATCH] port mat2 from gl-matrix --- src/mbgl/util/mat2.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++ src/mbgl/util/mat2.hpp | 41 +++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 src/mbgl/util/mat2.cpp create mode 100644 src/mbgl/util/mat2.hpp diff --git a/src/mbgl/util/mat2.cpp b/src/mbgl/util/mat2.cpp new file mode 100644 index 000000000..05900d166 --- /dev/null +++ b/src/mbgl/util/mat2.cpp @@ -0,0 +1,52 @@ +// This is an incomplete port of http://glmatrix.net/ +// +// Copyright (c) 2013 Brandon Jones, Colin MacKenzie IV +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the +// use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not claim +// that you wrote the original software. If you use this software in a +// product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. + +#include + +#include + +using namespace mbgl; + +void matrix::identity(mat2& out) { + out[0] = 1.0f; + out[1] = 0.0f; + out[2] = 0.0f; + out[3] = 1.0f; +} + +void matrix::rotate(mat2& out, const mat2& a, float rad) { + float a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], + s = std::sin(rad), + c = std::cos(rad); + out[0] = a0 * c + a2 * s; + out[1] = a1 * c + a3 * s; + out[2] = a0 * -s + a2 * c; + out[3] = a1 * -s + a3 * c; +}; + +void matrix::scale(mat2& out, const mat2& a, float v0, float v1) { + float a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3]; + out[0] = a0 * v0; + out[1] = a1 * v0; + out[2] = a2 * v1; + out[3] = a3 * v1; +} diff --git a/src/mbgl/util/mat2.hpp b/src/mbgl/util/mat2.hpp new file mode 100644 index 000000000..59110bf90 --- /dev/null +++ b/src/mbgl/util/mat2.hpp @@ -0,0 +1,41 @@ +// This is an incomplete port of http://glmatrix.net/ +// +// Copyright (c) 2013 Brandon Jones, Colin MacKenzie IV +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the +// use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not claim +// that you wrote the original software. If you use this software in a +// product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. + +#ifndef MBGL_UTIL_MAT2 +#define MBGL_UTIL_MAT2 + +#include + +namespace mbgl { + +typedef std::array mat2; + +namespace matrix { + +void identity(mat2& out); +void rotate(mat2& out, const mat2& a, float rad); +void scale(mat2& out, const mat2& a, float v0, float v1); + +} +} + +#endif